我正在尝试在一个 k8s 集群上设置多个服务,并在前面使用一个 Ingress Controller 为所有服务执行 tls 终止。 这是一个很好的例子:https://github.com/kubernetes/contrib/blob/master/ingress/controllers/nginx/examples/multi-tls/multi-tls.yaml
我最初遵循这个例子:https://github.com/brunoterkaly/ingress ,然后将其扩展为具有多个 tls 服务。
通过在 Azure 上公开我的 nginx 复制 Controller AKS,会自动创建一个负载均衡器和一个公共(public) IP 地址,我可以向其应用 A 记录:
kubectl 公开 rc nginx-ingress-rc --port="80,443"--type="LoadBalancer"
但是,我还想要第二个 A 记录,它指向相同的 IP 地址(我猜?),以便我可以从不同的域访问我的入口 Controller 。我不知道如何让 AKS 为此目的创建第二个?
最佳答案
也许这有点太晚了,并不完全符合原始帖子的要求。非正式地,您可以为入口 Controller 创建多个服务,从而也可以映射多个 IP。 LoadBalancer
类型的单个 k8s 服务的唯一限制是它只能引用单个 IP 地址。
就我而言,我的 AKS 集群包含许多命名空间和可通过不同 URL 访问的不同应用程序。由于历史原因,每个 URL 都有不同的公共(public) IP 地址:
示例:
first.example.com -> 1.2.3.4
second.example.com -> 5.6.7.8
...we could go on, IPs are just made up!
我想将 nginx ingress 安装到 AKS 中,以处理所有命名空间的路由,而不是使用专用的 LoadBalancer 和反向代理对处理每个应用程序。为此,我按照here描述的步骤进行操作并在入口部署过程中(使用 helm)仅提供了其中一个 IP 作为 controller.service.loadBalancerIP=”1.2.3.4”
。
完成此步骤后,我可以看到这些服务:
PS C:\> kubectl get service -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.0.141.84 1.2.3.4 80:30065/TCP,443:31444/TCP 14h
ingress-nginx-controller-admission ClusterIP 10.0.168.127 <none> 443/TCP 14h
之后,我手动创建了另一个具有完全相同的选择器标签和下一个 loadBalancerIP: 5.6.7.8
的服务 ingress-nginx-controller-second
。
完成此步骤后,我可以看到这些服务:
PS C:\> kubectl get service -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.0.141.84 1.2.3.4 80:30065/TCP,443:31444/TCP 14h
ingress-nginx-controller-admission ClusterIP 10.0.168.127 <none> 443/TCP 14h
ingress-nginx-controller-second LoadBalancer 10.0.204.118 5.6.7.8 80:31275/TCP,443:32751/TCP 10m
现在,如果我列出为两个应用程序定义的示例入口,您可以看到,两个应用程序都具有相同的第一个公共(public) IP。这是因为该 IP 被入口用作发布 IP。尽管如此,路由工作得很好,因为第二个服务将所有流量转发到同一个 ingress-nginx-controller,并且您可以像往常一样基于不同的主机/路径进行路由。
PS C:\Users\sk1u04h9> kubectl get ingress -A
NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
first first-ingress <none> first.example.com 1.2.3.4 80, 443 14h
second second-ingress <none> second.example.com 1.2.3.4 80, 443 5m
我希望这对尝试迁移到 nginx ingress 的人有所帮助,而无需预先将所有 URL 指向单个公共(public) IP。如果需要,在此迁移步骤之后,您可以请求让所有 URL 仅指向一个 IP,然后您当然可以删除所有不再需要的 ingress-nginx-controller-*
服务。
关于azure - 如何在 Azure AKS 上的一个入口 Controller 上创建多个负载均衡器 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49074383/