gpt4 book ai didi

kubernetes服务IP不可达

转载 作者:行者123 更新时间:2023-12-03 00:31:33 31 4
gpt4 key购买 nike

因此,我已经使用 Kubernetes on CoreOS Manual Installation Guide 启动并运行了一个 Kubernetes 集群。 .

$ kubectl get no
NAME STATUS AGE
coreos-master-1 Ready,SchedulingDisabled 1h
coreos-worker-1 Ready 54m

$ kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}
etcd-2 Healthy {"health": "true"}
etcd-1 Healthy {"health": "true"}

$ kubectl get pods --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE
default curl-2421989462-h0dr7 1/1 Running 1 53m 10.2.26.4 coreos-worker-1
kube-system busybox 1/1 Running 0 55m 10.2.26.3 coreos-worker-1
kube-system kube-apiserver-coreos-master-1 1/1 Running 0 1h 192.168.0.200 coreos-master-1
kube-system kube-controller-manager-coreos-master-1 1/1 Running 0 1h 192.168.0.200 coreos-master-1
kube-system kube-proxy-coreos-master-1 1/1 Running 0 1h 192.168.0.200 coreos-master-1
kube-system kube-proxy-coreos-worker-1 1/1 Running 0 58m 192.168.0.204 coreos-worker-1
kube-system kube-scheduler-coreos-master-1 1/1 Running 0 1h 192.168.0.200 coreos-master-1

$ kubectl get svc --all-namespaces
NAMESPACE NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes 10.3.0.1 <none> 443/TCP 1h

与指南一样,我设置了一个服务网络 10.3.0.0/16 和一个 Pod 网络 10.2.0.0/16。 Pod 网络似乎很好,因为 busybox 和curl 容器获得了 IP。但服务网络存在问题。最初,我在部署 kube-dns 时遇到了这种情况:无法访问服务 IP 10.3.0.1 ,因此 kube-dns 无法启动所有容器,并且DNS 最终无法正常工作。

从curl pod中,我可以重现该问题:

[ root@curl-2421989462-h0dr7:/ ]$ curl https://10.3.0.1
curl: (7) Failed to connect to 10.3.0.1 port 443: No route to host

[ root@curl-2421989462-h0dr7:/ ]$ ip route
default via 10.2.26.1 dev eth0
10.2.0.0/16 via 10.2.26.1 dev eth0
10.2.26.0/24 dev eth0 src 10.2.26.4

容器中只有默认路由似乎没问题。据我了解,请求(到默认路由)应该被工作节点上的 kube-proxy 拦截,转发到主节点上的代理,在主节点上 IP 通过 iptables 转换为掌握公共(public)IP。

bridge/netfilter sysctl 设置似乎存在一个常见问题,但这在我的设置中似乎很好:

core@coreos-worker-1 ~ $ sysctl net.bridge.bridge-nf-call-iptables
net.bridge.bridge-nf-call-iptables = 1

我很难排除故障,因为我不了解服务 IP 的用途、服务网络在流量方面应如何工作以及如何最好地进行调试。

所以这是我的问题:

  • 服务网络的第一个 IP(本例中为 10.3.0.1)的用途是什么?
  • 以上对交通流的描述正确吗?如果没有,容器需要经过哪些步骤才能到达服务IP?
  • 调试流量中每个步骤的最佳方法是什么? (我从日志中看不出有什么问题)

谢谢!

最佳答案

服务网络为服务提供固定IP。它不是一个可路由的网络(因此不要期望 ip ro 显示任何内容,也不会 ping 工作),而是由每个节点上的 kube-proxy 管理的 iptables 规则集合(请参阅 iptables -L ; iptables -t nat -L 在节点上,而不是 Pod 上)。这些virtual IPs (参见图片!)充当端点的负载平衡代理(kubectl get ep),端点通常是 Pod 的端口(但并非总是如此),具有服务中定义的一组特定标签。

服务网络上的第一个 IP 用于访问 kube-apiserver 本身。它正在监听端口 443 (kubectl describe svc kubernetes)。

每个网络/集群设置的故障排除都不同。我通常会检查:

  • kube-proxy 是否在每个节点上运行?在某些设置上,它通过 systemd 运行,而在其他设置上,有一个 DeamonSet 在每个节点上调度一个 Pod。在您的设置中,它被部署为由 kubelet thrmselves 从 /etc/kubernetes/manifests/kube-proxy.yaml
  • 创建的静态 Pod
  • 找到 kube-proxy 的日志并找到线索(您可以发布一些吗?)
  • 将 kube-proxy 更改为用户空间模式。同样,详细信息取决于您的设置。对于您来说,它位于我上面提到的文件中。将 --proxy-mode=userspace 作为参数附加到每个节点
  • 覆盖 (pod) 网络是否正常工作?

如果您留下评论,我会回复您..

关于kubernetes服务IP不可达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42705432/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com