因此,我已经使用《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/16
。Pod网络似乎很好,因为busybox和curl容器获得了IP。但是服务网络有问题。最初,我在部署时遇到了此问题kube-dns
:10.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。它不是可路由的网络(因此,不要指望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
)。
每个网络/群集设置的故障排除方法都不相同。我通常会检查:
/etc/kubernetes/manifests/kube-proxy.yaml
userspace
mode。同样,详细信息取决于您的设置。对于您来说,它位于我上面提到的文件中。--proxy-mode=userspace
作为参数附加在每个节点上如果您有任何评论,我会尽快回复您。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句