首页 > 解决方案 > Kubernetes Nginx 入口控制器就绪探测失败

问题描述

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

这是我在 kube-system 中运行的所有 pod 在 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 失败的屏幕截图: 正在运行和失败的 pod

所有节点的设置方式完全相同,没有区别。我对 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 集群中涉及的所有节点添加主机条目,以便它们可以在不访问 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

谢谢

标签: kubernetesnginx-ingresscoredns

解决方案


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

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

这篇文章提到在 RHEL 8 上存在网络问题:

(2020/02/11 更新:安装后,我一直面临 pod 网络问题,例如部署的 pod 无法访问外部网络或部署在不同工作人员中的 pod 无法相互 ping,即使我可以看到所有节点 (master、worker1和 worker2) 已经通过 kubectl get nodes准备好了。通过 Kubernetes.io 官网查看后,我观察到 nfstables 后端与当前的 kubeadm 包不兼容。请参考“<strong>确保不使用 iptables 工具”中的以下链接nfstables 后端”。

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


推荐阅读