[kubernetes]Calico运行异常:dial tcp 10.96.0.1:443: connect: connection refused
dingpwen
于 2022-04-27 10:33:12 发布
5309
收藏
分类专栏: 云原生 web开发 文章标签: kubernetes Calico
版权
华为云开发者联盟
该内容已被华为云开发者联盟社区收录
加入社区
云原生
同时被 2 个专栏收录
5 篇文章0 订阅
订阅专栏
web开发
7 篇文章0 订阅
订阅专栏
安装calico网络插件之后,发现相关pod一直不能进入Ready状态,查看log,出现如下问题:
Hit error connecting to datastore - retry error=Get “https://10.96.0.1:443/api/v1/nodes/foo”: dial tcp 10.96.0.1:443: connect: connection refused
网上查资料都说是什么iptables配置的问题,各种尝试,发现完全不对。于是打算从根源了解这个东西。
那么这个10.96.0.1到底是什么呢?原来
在 kubernetes,可以从集群外部和内部两种方式访问 kubernetes API,在集群外直接访问 apiserver 提供的 API,在集群内即 pod 中可以通过访问 service 为 kubernetes 的 ClusterIP。kubernetes 集群在初始化完成后就会创建一个 kubernetes service,该 service 是 kube-apiserver 创建并进行维护的,如下所示:
[root@master1 dingpwen]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d20h
1
2
3
4
内置的 kubernetes service 无法删除,其 ClusterIP 为通过 --service-cluster-ip-range 参数指定的 ip 段中的首个 ip,kubernetes endpoints 中的 ip 以及 port 可以通过 --advertise-address 和 --secure-port 启动参数来指定。
那么我们Node上的pod又如何才能访问到这个服务呢?毕竟相对于master机器,Node机器通过ip访问相当于“外网”。
其实我们查看kube-proxy的代码就会发现
I0427 01:46:24.595581 1 config.go:233] "Calling handler.OnEndpointSlicesSynced()"
I0427 01:46:24.595902 1 service.go:419] "Adding new service port" portName="default/kubernetes:https" servicePort="10.96.0.1:443/TCP"
I0427 01:46:24.595983 1 service.go:419] "Adding new service port" portName="kube-system/kube-dns:dns" servicePort="10.96.0.10:53/UDP"
I0427 01:46:24.596036 1 service.go:419] "Adding new service port" portName="kube-system/kube-dns:dns-tcp" servicePort="10.96.0.10:53/TCP"
I0427 01:46:24.596047 1 service.go:419] "Adding new service port" portName="kube-system/kube-dns:metrics" servicePort="10.96.0.10:9153/TCP"
I0427 01:46:24.596056 1 service.go:419] "Adding new service port" portName="kubernetes-dashboard/dashboard-metrics-scraper" servicePort="10.101.210.188:8000/TCP"
I0427 01:46:24.596065 1 service.go:419] "Adding new service port" portName="kubernetes-dashboard/kubernetes-dashboard" servicePort="10.98.70.204:443/TCP"
I0427 01:46:24.596276 1 endpointslicecache.go:358] "Setting endpoints for service port name" portName="kubernetes-dashboard/kubernetes-dashboard" endpoints=[10.244.137.69:8443]
I0427 01:46:24.596305 1 endpointslicecache.go:358] "Setting endpoints for service port name" portName="default/kubernetes:https" endpoints=[192.168.106.131:6443]
I0427 01:46:24.596315 1 endpointslicecache.go:358] "Setting endpoints for service port name" portName="kube-system/kube-dns:dns" endpoints=[10.244.104.2:53]
I0427 01:46:24.596321 1 endpointslicecache.go:358] "Setting endpoints for service port name" portName="kube-system/kube-dns:dns-tcp" endpoints=[10.244.104.2:53]
I0427 01:46:24.596329 1 endpointslicecache.go:358] "Setting endpoints for service port name" portName="kube-system/kube-dns:metrics" endpoints=[10.244.104.2:9153]
kube-proxy会把portName=“default/kubernetes:https” servicePort=“10.96.0.1:443/TCP” 注册到本服务中,那么Node端就可以通过kube-proxy来访问10.96.0.1:443这个服务。
所以出现标题所示问题,根源在该机器没有运行kube-proxy,或者kube-proxy运行异常。
————————————————
版权声明:本文为CSDN博主「dingpwen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dingpwen/article/details/124444614