kubernetes服务IP无法访问

草丛

因此,我已经使用《CoreOS手动安装指南》中Kubernetes启动并运行了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/16Pod网络似乎很好,因为busybox和curl容器获得了IP。但是服务网络有问题。最初,我在部署时遇到了此问题kube-dns10.3.0.1无法访问服务IP ,因此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转换为主公共IP。

网桥/ 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会采取什么步骤?
  • 调试流量中每个步骤的最佳方法是什么?(我不知道日志有什么问题)

谢谢!

亚诺斯·莱纳特(Janos Lenart)

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

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

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

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

如果您有任何评论,我会尽快回复您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Kubernetes 服务无法访问

无法访问Kubernetes服务

无法访问 Kubernetes 中的服务

无法访问 Kubernetes 上的 LoadBalancer 服务

由于无法访问 kubernetes api 服务器集群 IP,大使 pod 在 kubernetes 中失败 - [Errno 113] 主机无法访问',)

Kubernetes Pod无法访问外部IP地址

无法访问将externalTrafficPolicy作为“本地”的kubernetes服务

随着年龄的增长,Kubernetes服务无法访问

无法访问本地主机上的kubernetes服务

Pod无法访问本地机器Kubernetes服务

无法访问通过NodePort公开的Kubernetes服务

使用hostNetwork True的Kubernetes Pod无法访问同一集群中的服务的外部IP

Kubernetes无法访问Pod

minikube ip无法访问

无法访问服务参考

无法在外部IP Kubernetes上访问服务

无法从外部 IP azure devops kubernetes 访问服务

无法访问Google Cloud上公开的外部IP的Kubernetes Pod

docker-for-desktop 窗口中的 pod 无法访问 kubernetes 外部名称服务

Kubernetes 正在创建一个端口不正确的 nodeport 服务并且无法访问

如果在kubernetes集群中将externalTrafficPolicy设置为Local,为什么无法访问服务

Kubernetes:无法访问 flannel pod

无法访问kubernetes上的暴露端口

在Kubernetes中无法访问Sidecar容器

集群内无法访问Kubernetes POD

无法访问kubernetes pod的代理

无法访问具有IP地址的本地服务器,而localhost和127.0.0.1可以

尽管在hosts.allow中设置了IP,但仍无法访问服务器

计算机无法访问更改IP的Web服务器