默认的kubernetes服务的由来
安装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 内置的 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运行异常。
时来天地皆同力,运去英雄不自由
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2017-11-29 jenkins部署
2017-11-29 git clone ....git
2017-11-29 gitlab手残点错关闭注册No authentication methods configured on login page
2017-11-29 sign-up 签约注册
2017-11-29 代码上线的十二个步骤
2017-11-29 nginx健康节点检查nginx_upstream_check_module 淘宝的upstream_check进行nginx后端检查 tengine
2017-11-29 Supervisord进程管理工具