Azure 上的 Kubernetes:为不同的服务分配不同的外部 IP

Kubernetes on Azure: assign different external IP to different services

我使用 Azure 容器服务在 Azure 上创建了一个 Kubernets 集群示例设置,它的工作做得很好。我在 Kubernetes 中设置了几个容器和服务,没问题。

让我感到困惑的是,如果我 运行 几个 nginx 容器并想通过不同的外部 IP 公开它,我不能那样做对于我所知道和理解的。

Azure approach 是我可以设置服务并设置 type: LoadBalancer 并且当我创建它时,Azure 将 "connect" LoadBalancer 连接到我的服务的客户端节点。

但是这样我只能将一个外部IP附加到我的所有服务,这不是我需要的。在我的例子中,当我 运行 几个 nginx 容器时,我想在不同的 IP 上公开它的 80/tcp 端口,这样我就可以在 DNS 中使用这些 IP,而不是在单个 IP 的不同端口上。

我该如何克服呢? 请帮忙!

查看您链接的 Azure 文档,它似乎与它在任何云上应该做的并没有什么不同。我想你想念应该如何使用它。

当您创建任何类型的服务时,它旨在提供没有区别的服务。如果它指向多个端点,它会对 LoadBalance 流量执行此操作并提供 HA。在每个端点的 IP 基础上将其暴露在外部的原因为零。

但是,如果您需要在不同的 IP 上公开 不同的 服务,您只需将这两个服务都创建为 LoadBalancer 服务类型,并且每个 svc 都应该接收其唯一的外部负载均衡器(因此IP).

您描述的行为(一个负载均衡器,多个外部暴露的服务)听起来更接近您可以通过 Ingress/IngressController 实现的结果。

在 Azure 容器服务中,要将 kubernetes 服务暴露到 Internet,我们应该使用 Azure Load balancer。正如 Radek 所说,一个 pod 中有多个容器,并使用相同的负载均衡器来保持 HA。

如果你想把几个不同Public IP地址的容器暴露到Internet,我们可以创建几个pods,然后把它们暴露到Internet,这样,不同[=31]的容器=] IP 地址。

pod、container、node的关系,是这样的:

我们在一个 pod 中创建多个容器,在一个节点(主机)中创建多个 pods,多个 pods 为一项服务工作。一项服务作为一个集群工作,一项服务具有一个 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 门户找到负载均衡器前端 IP 设置(两个 public IP 地址):