我使用 Azure 容器服务在 Azure 上创建了一个 Kubernets 集群的示例设置,它的工作效果很好。我在 Kubernetes 中设置了多个容器和服务,没有问题。
让我感到困惑的是,如果我运行多个 nginx 容器并希望通过不同的外部 IP 公开它,据我所知和理解,我无法做到这一点。
Azure approach是我可以设置服务并设置类型:LoadBalancer
,当我创建它时,Azure 会将附加到客户端节点的 LoadBalancer“连接”到我的服务。
但是这样我只能将一个外部IP附加到所有我的服务,这不是我需要的。在我的示例中,当我运行多个 nginx 容器时,我想在不同的 IP 上公开其 80/tcp 端口,以便我可以在 DNS 中使用这些 IP,而不是在单个 IP 的不同端口上。
我该如何克服这个问题? 请帮忙!
最佳答案
在Azure容器服务中,要将kubernetes服务公开到Internet,我们应该使用Azure负载均衡器。正如Radek所说,多个容器位于一个pod中,并使用相同的负载均衡器来保持HA。
如果你想将多个容器暴露到具有不同公网IP地址的互联网上,我们可以创建多个Pod,并将它们暴露到互联网上,这样就实现了具有不同公网IP地址的容器。
我们在一个 Pod 中创建多个容器,在一个节点(主机)中创建多个 Pod,多个 Pod 为一项服务工作。一项服务作为一个集群运行,一项服务具有一个公共(public) IP 地址。
因此,如果您想创建多个具有不同公共(public) IP 地址的 nginx 容器,我们可以创建多个服务来归档此内容:
在一项服务中创建一到两个 nginx 容器,并将多项服务公开到 Internet。
root@k8s-master-7273A780-0:~# kubectl run jasonnginx --replicas=1 --image nginx
root@k8s-master-7273A780-0:~# kuberctl run mynginx --replicas=2 --image nginx
root@k8s-master-7273A780-0:~# kubectl expose deployments mynginx --port=80 --type=LoadBalancer
root@k8s-master-7273A780-0:~# kubectl expose deployments jasonnginx --port=80 --type=LoadBalancer
root@k8s-master-7273A780-0:~# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jasonnginx 10.0.114.116 52.168.176.18 80:30153/TCP 5m
kubernetes 10.0.0.1 <none> 443/TCP 15m
mynginx 10.0.205.127 13.82.102.171 80:31906/TCP 6m
root@k8s-master-7273A780-0:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
jasonnginx-1417538491-v79mw 1/1 Running 0 20m
mynginx-1396894033-78njj 1/1 Running 0 21m
mynginx-1396894033-pmhjh 1/1 Running 0 21m
关于azure - Azure 上的 Kubernetes : assign different external IP to different services,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45332397/