我有一个kubernetes设置运行良好,但我似乎不能对外公开服务。我在想,我的关系网设置得不对:
kubernetes服务地址:-服务-集群-ip-range=172.16.0.1/16
法兰绒网络配置: etcdctl get /test.lan/get/config{“网络”:“172.17.0.0/16”}
docker子网设置:-bip=10.0.0.1/24
主机IP: 192.168.4.57
我已经运行了nginx服务,我试图像这样公开它:
[root@kubemaster ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-px6uy 1/1 Running 0 4m
[root@kubemaster ~]# kubectl get services
NAME LABELS SELECTOR IP(S) PORT(S) AGE
kubernetes component=apiserver,provider=kubernetes <none> 172.16.0.1 443/TCP 31m
nginx run=nginx run=nginx 172.16.84.166 9000/TCP 3m然后我像这样公开了服务:
kubectl expose rc nginx --port=9000 --target-port=9000 --type=NodePort
NAME LABELS SELECTOR IP(S) PORT(S) AGE
nginx run=nginx run=nginx 9000/TCP 292y我现在希望能够访问主机节点IP (192.168.4.57)上的nginx容器--我是否误解了网络?如果我做了,能否解释一下:
注意:这是在没有云提供商提供负载均衡器的物理硬件上,所以我认为NodePort是我唯一的选择?
发布于 2015-12-24 12:55:04
因此,这里的问题是,当您使用nodePort时,缺少了一块拼图。
我在命令上也犯了错误。
首先,您需要确保公开正确的端口,在本例中是nginx的80端口:
kubectl expose rc nginx --port=80 --type=NodePort其次,您需要使用kubectl describe svc nginx,它将显示在每个节点上分配的NodePort:
[root@kubemaster ~]# kubectl describe svc nginx
Name: nginx
Namespace: default
Labels: run=nginx
Selector: run=nginx
Type: NodePort
IP: 172.16.92.8
Port: <unnamed> 80/TCP
NodePort: <unnamed> 32033/TCP
Endpoints: 10.0.0.126:80,10.0.0.127:80,10.0.0.128:80
Session Affinity: None
No events.当然,您可以在部署时分配一个,但是在使用随机分配的端口时,我遗漏了这个信息。
发布于 2015-12-18 18:33:30
是的,您需要使用NodePort。当您命中服务时,destPort应该等于NodePort。服务的destIP应该被节点视为本地的。例如,您可以使用其中一个节点的hostIP。
负载均衡器有帮助,因为它可以处理节点崩溃的情况,但其他节点仍然可以处理服务。
发布于 2016-01-05 22:14:55
如果您在裸金属上运行集群,或者不在提供负载均衡器的提供者上运行群集,您还可以将端口定义为吊舱上的hostPort
定义容器和港口
containers:
- name: ningx
image: nginx
ports:
- containerPort: 80
hostPort: 80
name: http这将将容器绑定到主机网络并使用定义的端口。
这里的两个限制很明显: 1)每个主机上最多只能有一个这样的豆荚。2) IP是它绑定到的节点的主机IP。
这就是云提供商负载平衡器在某种程度上的工作方式。
使用新的DaemonSet特性,可以定义豆荚将登陆哪个节点并修复IP。然而,这必然会损害高可用性方面,但是在某些时候没有太多的选择,因为DNS负载平衡不会避免转发到死节点。
https://stackoverflow.com/questions/34361679
复制相似问题