Kubernetes,法兰绒和揭露服务

我有一个kubernetes设置运行很好,但我似乎无法公开外部服务。 我在想我的networking设置不正确:

kubernetes服务地址:–service-cluster-ip-range = 172.16.0.1 / 16

法兰绒networkingconfiguration:etcdctl get /test.lan/network/config {“Network”:“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 

我期望现在能够到达hostnodes IP(192.168.4.57)上的nginx容器 – 我误解了networking? 如果我有,可以解释将明白:(

注意:这是在没有提供云提供商负载均衡器的物理硬件上,所以NodePort是我唯一的select,我想呢?

我期望现在能够到达hostnodes IP(192.168.4.57)上的nginx容器 – 我误解了networking? 如果我有,可以解释将明白:(

预计读取hostIP:NodePort上的pod,您可以在其中find服务的节点端口:

kubectl get svc echoheaders --template '{{range .spec.ports}}{{.nodePort}}{{end}}'

注意:这是在没有提供云提供商负载均衡器的物理硬件上,所以NodePort是我唯一的select,我想呢?

您可以部署入口控制器,例如: https : //github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx或https://github.com/kubernetes/contrib/tree/master/service-loadbalancer

NodePort服务是小型/本地裸机群集中最常见的解决scheme,同样的端口将在运行作业的所有节点(即可能不是您的主节点,但工作节点)上运行, kube-proxy

对于较小的networking,有些贡献/不明显的代码就像一个LoadBalancer,所以如果你想在本地和云中使用Type:LoadBalancer,那么你可以得到大致相当的机制。

当您希望在端口80或443上混合和匹配从群集公开的服务(特别是HTTP服务)时,入口控制器对NodePort非常有用,并且构build为专门支持通过单个端点的多个服务(可能只有一个端口映射到单独的URIpath等)。 当你想要的访问不是基于HTTP的(例如,基于套接字的服务,比如Redis或者MongoDB,或者你正在做的一些自定义的事情)时,入口控制器并没有那么多的帮助。

如果要将其集成到内部IT项目中,那么许多商业负载平衡器build议使用自己的负载平衡器技术向前configurationNodePortconfiguration,并在该设置中引用所有工作节点的池。 F5在他们的文档中有一个合理的例子 。

您不必使用NodePort,也不必使用外部负载平衡器。 只需将您的某些群集节点专用为负载均衡节点即可。 你把它们放在一个不同的节点组中,给它们一些标签: mynodelabel/ingress: nginx ,并且你在那个节点组上托pipe一个nginx入口守护进程集。

最重要的select是:

 spec: restartPolicy: Always dnsPolicy: ClusterFirst hostNetwork: true nodeSelector: mynodelabel/ingress: nginx 

  ports: - containerPort: 80 hostPort: 80 - containerPort: 443 hostPort: 443 

可选地,你可以弄脏你的负载均衡器节点,使正常的豆荚不能在它们上工作,并减慢nginx。