首先我想说我是kubernetes-topic的初学者,当我给服务一个固定的IP时,我遇到的问题是我无法(通过服务)到达一个pod,所以我想总结一下我认为我已经理解的事情,也许这里有人可以纠正我或了解我解决问题的方法。
我使用 ansible-script kubespray 在裸机(2 个 CentOS 7 的节点)上部署我的集群,并配置脚本和生成的集群如下:
- 代理模式:ipvs
- 服务网络:10.0.0.0/24
- 吊舱网络:10.0.1.0/24
- 网络插件:编织网
- dns_mode: dnsmasq_kubedns
部署成功后,我可以将 pod、服务、机密等部署到集群,所以对我来说它工作正常,但是当我现在定义一个外部 IP 时,例如:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- port: 80
selector:
name: nginx
externalIPs:
- "192.168.1.42"
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx
spec:
containers:
- name: gluster-pod1
image: gcr.io/google_containers/nginx-slim:0.8
ports:
- name: web
containerPort: 80
我可以通过他的内部 IP、端点的 IP 和主服务器的 IP 而不是通过我为此服务定义的 IP 到达 pod,当我尝试这个时,我通过 curl 错误得到:“没有到主机的路由“对我来说奇怪的是,当我将服务的 IP 设置为与 kubernetes master 相同的 IP 时,即
...
spec:
ports:
- port: 80
selector:
name: nginx
externalIPs:
- "192.168.1.1"
我可以到达吊舱。
现在,在我阅读了大量文档和操作指南后,当我配置自己的负载均衡器来管理外部 IP 时,问题是可以解决的,因为如果我没有定义固定 IP,服务会等待外部 IP 的状态为“待定” .
但不幸的是,在阅读完所有文档之后,我不确定架构是否真的以这种方式工作,我的意思是 pod <-> service <-> load-balancer (<-> DHCP)
所以我可以通过服务到达吊舱。
当我开始时,我想关闭这篇文章,我不确定这是解决我的问题的正确方向。这就是为什么如果有人可以确认或纠正我,我将非常感激:-) 最好的问候丹