【问题标题】:Kubernetes Nginx Ingress controller Readiness Probe failedKubernetes Nginx 入口控制器就绪探测失败
【发布时间】:2021-01-01 15:09:00
【问题描述】:

我正在尝试设置我的第一个 Kubernetes 集群,它似乎在 nginx-ingress 控制器之前设置良好。 这是我的集群信息: 节点:三个 RHEL7 和一个 RHEL8 节点 Master 在 RHEL7 上运行 Kubernetes 服务器版本:1.19.1 使用的网络:法兰绒 coredns 运行良好。 在所有节点上禁用 selinux 和防火墙

这是我在 kube-system 中运行的所有 pod

然后我按照以下页面上的说明安装 nginx 入口控制器:https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/

我决定使用 daemon-set 而不是部署,因为我的 kubernetes 集群中将只有少数节点运行。

按照说明操作后,我的 RHEL8 上的 pod 不断失败并出现以下错误:

就绪探测失败:获取“http://10.244.3.2:8081/nginx-ready”:拨号 tcp 10.244.3.2:8081:连接:连接被拒绝 后退重启 失败的容器

以下屏幕截图显示 RHEL7 pod 工作正常而 RHEL8 失败:

所有节点的设置方式完全相同,没有区别。 我对 Kubernetes 很陌生,对它的内部了解不多。有人可以指点我如何调试和解决这个问题吗?我真的很愿意从这样的问题中学习。

这就是我配置 RHEL7 和 RHEL8 节点的方式

  1. 安装的docker版本:19.03.12,build 48a66213fe
  2. 已禁用防火墙
  3. 禁用交换
  4. 已禁用 SELinux
  5. 要启用 iptables 以查看桥接流量,请设置 net.bridge.bridge-nf-call-ip6tables = 1 和 net.bridge.bridge-nf-call-iptables = 1
  6. 为 Kubernetes 集群中涉及的所有节点添加了 hosts 条目,以便它们可以在不访问 DNS 的情况下找到彼此
  7. 在 /etc/environment 上为 no_proxy 添加了 Kubernetes 集群中所有节点的 IP 地址,这样它就不会命中公司代理
  8. 已验证 docker 驱动程序是“systemd”而不是“cgroupfs”
  9. 重启服务器
  10. 按照 kubernetes 指南安装 kubectl、kubeadm、kubelet:https://kubernetes.io/docs/tasks/tools/install-kubectl/
  11. 启动并启用 kubelet 服务
  12. 通过执行以下操作来初始化 master:
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
  1. 为混合操作系统调度应用节点选择器补丁
wget https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/l2bridge/manifests/node-selector-patch.yml
kubectl patch ds/kube-proxy --patch "$(cat node-selector-patch.yml)" -n=kube-system
  1. 应用法兰绒CNI
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

将 kube-flannel.yml 的 net-conf.json 部分修改为“host-gw”类型

kubectl apply -f kube-flannel.yml

应用节点选择器补丁

kubectl patch ds/kube-flannel-ds-amd64 --patch "$(cat node-selector-patch.yml)" -n=kube-system

谢谢

【问题讨论】:

  • 您能否检查一下 RHEL 8 节点上没有 DNS 缓存,例如dnsmasq。如果是 dnsmasq,你会看到类似:cat /etc/NetworkManager/conf.d/dns.conf [main] dns=dnsmasq
  • 我在 /etc/NetworkManager/conf.d 中没有 dns.conf。 conf.d 目录为空
  • 您好,RHEL 8 节点是工作节点,安装过程与其他节点完全相同。你能分享你是如何安装节点的吗?请指定您使用的集群部署工具。
  • 是的,RHEL8 是一个工作节点。其中一个 RHEL7 服务器是主节点。我还添加了初始化集群并应用法兰绒 CNI 的步骤。
  • 我可以修补整个命名空间吗?我也可以限制它。我知道使用 --selector 在本地失败。但也许我还能做点别的?

标签: kubernetes nginx-ingress coredns


【解决方案1】:

根据kubernetes 文档,支持的主机操作系统列表如下:

  • Ubuntu 16.04+
  • Debian 9+
  • CentOS 7
  • 红帽企业 Linux (RHEL) 7
  • Fedora 25+
  • HypriotOS v1.0.1+
  • Flatcar Container Linux(使用 2512.3.0 测试)

article 提到 RHEL 8 存在网络问题:

(2020/02/11 更新:安装后,我一直面临 pod 网络问题,就像部署的 pod 无法访问外部网络一样 或者部署在不同工作人员中的 pod 无法相互 ping 通 甚至我可以看到所有节点(master、worker1 和 worker2)都准备好了 kubectl 获取节点。通过 Kubernetes.io 官网查看后,我观察到 nfstables 后端与 当前的 kubeadm 软件包。请参考“确保 iptables 工具不使用 nfstables 后端”。

这里最简单的解决方案是在支持的操作系统上重新安装节点。

【讨论】:

  • 查看文章和其他帖子,看来我将不得不降低我的野心,暂时使用 RHEL7 作为工作节点。感谢您指出这两页以供参考。
猜你喜欢
  • 1970-01-01
  • 2019-12-05
  • 2018-07-10
  • 2021-02-06
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 2020-05-11
相关资源
最近更新 更多