Kubernetes Nginx 入口控制器就绪探测失败
Kubernetes Nginx Ingress controller Readiness Probe failed
我正在尝试设置我的第一个 Kubernetes 集群,在 nginx-ingress 控制器之前它似乎已经设置好了。
这是我的集群信息:
节点:三个 RHEL7 和一个 RHEL8 节点
Master 在 RHEL7 上是 运行
Kubernetes 服务器版本:1.19.1
使用的网络:绒布
coredns 运行 很好。
在所有节点上禁用 selinux 和防火墙
这是我在 kube-system 中的全部 pods 运行
然后我按照以下页面上的说明安装 nginx 入口控制器:https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/
我决定使用 daemon-set 而不是部署,因为我的 kubernetes 集群中只有几个节点 运行。
按照说明操作后,我的 RHEL8 上的 pod 不断失败并出现以下错误:
Readiness probe failed: Get "http://10.244.3.2:8081/nginx-ready": dial
tcp 10.244.3.2:8081: connect: connection refused Back-off restarting
failed container
这是显示 RHEL7 pods 工作正常而 RHEL8 失败的屏幕截图:
所有节点的设置方式完全相同,没有区别。
我是 Kubernetes 的新手,对它的内部结构了解不多。有人可以指出我如何调试和解决这个问题吗?我很愿意从这样的问题中学习。
这就是我配置 RHEL7 和 RHEL8 节点的方式
- 已安装 docker 版本:19.03.12,构建 48a66213fe
- 禁用防火墙
- 禁用交换
- 已禁用 SELinux
- 要启用 iptables 查看桥接流量,请设置 net.bridge.bridge-nf-call-ip6tables = 1 和 net.bridge.bridge-nf-call-iptables = 1
- 为 Kubernetes 集群中涉及的所有节点添加了主机条目,以便它们可以在不访问 DNS 的情况下找到彼此
- 为 no_proxy 添加了 /etc/environment 上 Kubernetes 集群中所有节点的 IP 地址,这样它就不会命中公司代理
- 已验证 docker 驱动程序是“systemd”而不是“cgroupfs”
- 重启服务器
- 按照此处的 kubernetes 指南安装 kubectl、kubeadm、kubelet:https://kubernetes.io/docs/tasks/tools/install-kubectl/
- 启动并启用 kubelet 服务
- 通过执行以下命令初始化 master:
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
- 为混合 OS 调度应用节点选择器补丁
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
- 应用法兰绒 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
谢谢
根据kubernetes文档,支持的主机操作系统列表如下:
- Ubuntu 16.04+
- Debian 9+
- CentOS 7
- Red Hat Enterprise Linux (RHEL) 7
- Fedora 25+
- HypriotOS v1.0.1+
- Flatcar Container Linux (tested with 2512.3.0)
此 article 提到 RHEL 8 上存在网络问题:
(2020/02/11 Update: After installation, I keep facing pod network issue which is like deployed pod is unable to reach external network
or pods deployed in different workers are unable to ping each other
even I can see all nodes (master, worker1 and worker2) are ready via
kubectl get nodes. After checking through the Kubernetes.io official website, I observed the nfstables backend is not compatible with the
current kubeadm packages. Please refer the following link in “Ensure
iptables tooling does not use the nfstables backend”.
此处最简单的解决方案是在支持的操作系统上重新安装节点。
我正在尝试设置我的第一个 Kubernetes 集群,在 nginx-ingress 控制器之前它似乎已经设置好了。 这是我的集群信息: 节点:三个 RHEL7 和一个 RHEL8 节点 Master 在 RHEL7 上是 运行 Kubernetes 服务器版本:1.19.1 使用的网络:绒布 coredns 运行 很好。 在所有节点上禁用 selinux 和防火墙
这是我在 kube-system 中的全部 pods 运行
然后我按照以下页面上的说明安装 nginx 入口控制器:https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/
我决定使用 daemon-set 而不是部署,因为我的 kubernetes 集群中只有几个节点 运行。
按照说明操作后,我的 RHEL8 上的 pod 不断失败并出现以下错误:
Readiness probe failed: Get "http://10.244.3.2:8081/nginx-ready": dial tcp 10.244.3.2:8081: connect: connection refused Back-off restarting failed container
这是显示 RHEL7 pods 工作正常而 RHEL8 失败的屏幕截图:
所有节点的设置方式完全相同,没有区别。 我是 Kubernetes 的新手,对它的内部结构了解不多。有人可以指出我如何调试和解决这个问题吗?我很愿意从这样的问题中学习。
这就是我配置 RHEL7 和 RHEL8 节点的方式
- 已安装 docker 版本:19.03.12,构建 48a66213fe
- 禁用防火墙
- 禁用交换
- 已禁用 SELinux
- 要启用 iptables 查看桥接流量,请设置 net.bridge.bridge-nf-call-ip6tables = 1 和 net.bridge.bridge-nf-call-iptables = 1
- 为 Kubernetes 集群中涉及的所有节点添加了主机条目,以便它们可以在不访问 DNS 的情况下找到彼此
- 为 no_proxy 添加了 /etc/environment 上 Kubernetes 集群中所有节点的 IP 地址,这样它就不会命中公司代理
- 已验证 docker 驱动程序是“systemd”而不是“cgroupfs”
- 重启服务器
- 按照此处的 kubernetes 指南安装 kubectl、kubeadm、kubelet:https://kubernetes.io/docs/tasks/tools/install-kubectl/
- 启动并启用 kubelet 服务
- 通过执行以下命令初始化 master:
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
- 为混合 OS 调度应用节点选择器补丁
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
- 应用法兰绒 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
谢谢
根据kubernetes文档,支持的主机操作系统列表如下:
- Ubuntu 16.04+
- Debian 9+
- CentOS 7
- Red Hat Enterprise Linux (RHEL) 7
- Fedora 25+
- HypriotOS v1.0.1+
- Flatcar Container Linux (tested with 2512.3.0)
此 article 提到 RHEL 8 上存在网络问题:
(2020/02/11 Update: After installation, I keep facing pod network issue which is like deployed pod is unable to reach external network or pods deployed in different workers are unable to ping each other even I can see all nodes (master, worker1 and worker2) are ready via kubectl get nodes. After checking through the Kubernetes.io official website, I observed the nfstables backend is not compatible with the current kubeadm packages. Please refer the following link in “Ensure iptables tooling does not use the nfstables backend”.
此处最简单的解决方案是在支持的操作系统上重新安装节点。