Nic*_*rts 0 nginx azure kubernetes-ingress azure-aks
我正在尝试在一个 k8s 集群上设置多个服务,并在前面使用一个 Ingress 控制器对所有服务进行 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 复制控制器 AKS,会自动创建一个负载均衡器和一个公共 IP 地址,我可以向其应用 A 记录:
kubectl expose rc nginx-ingress-rc --port="80,443" --type="LoadBalancer"
但是,我还想要第二个 A 记录,它指向相同的 IP 地址(我猜?),以便我可以从不同的域访问我的入口控制器。我不知道如何让 AKS 为此目的创建第二个?
小智 5
也许这有点太晚了,并不完全符合原始帖子的要求。非正式地,您可以为入口控制器创建多个服务,从而也可以映射多个 IP。这只是单一 k8s 服务类型的限制LoadBalancer它只能引用单个 IP 地址。
就我而言,我的 AKS 集群包含许多命名空间和可通过不同 URL 访问的不同应用程序。由于历史原因,每个 URL 都有不同的公共 IP 地址:
\n例子:
\nfirst.example.com -> 1.2.3.4\nsecond.example.com -> 5.6.7.8\n...we could go on, IPs are just made up!\nRun Code Online (Sandbox Code Playgroud)\n我想将 nginx ingress 安装到 AKS 中,以处理所有命名空间的路由,而不是使用专用的 LoadBalancer 和反向代理对处理每个应用程序。为此,我按照此处描述的步骤进行操作,并在入口部署过程中(使用 helm)仅提供了其中一个 IP controller.service.loadBalancerIP=\xe2\x80\x9d1.2.3.4\xe2\x80\x9d。
完成此步骤后,我可以看到这些服务:
\nPS C:\\> kubectl get service -n ingress-nginx\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\ningress-nginx-controller LoadBalancer 10.0.141.84 1.2.3.4 80:30065/TCP,443:31444/TCP 14h\ningress-nginx-controller-admission ClusterIP 10.0.168.127 <none> 443/TCP 14h\nRun Code Online (Sandbox Code Playgroud)\n之后,我手动创建了另一个ingress-nginx-controller-second具有完全相同的选择器标签和 next 的服务loadBalancerIP: 5.6.7.8。
完成此步骤后,我可以看到这些服务:
\nPS C:\\> kubectl get service -n ingress-nginx\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\ningress-nginx-controller LoadBalancer 10.0.141.84 1.2.3.4 80:30065/TCP,443:31444/TCP 14h\ningress-nginx-controller-admission ClusterIP 10.0.168.127 <none> 443/TCP 14h\ningress-nginx-controller-second LoadBalancer 10.0.204.118 5.6.7.8 80:31275/TCP,443:32751/TCP 10m\nRun Code Online (Sandbox Code Playgroud)\n现在,如果我列出为两个应用程序定义的示例入口,您可以看到,两个应用程序都具有相同的第一个公共 IP。这是因为该 IP 被入口用作发布 IP。尽管如此,路由工作得很好,因为第二个服务将所有流量转发到同一个 ingress-nginx-controller,并且您可以像往常一样基于不同的主机/路径进行路由。
\nPS C:\\Users\\sk1u04h9> kubectl get ingress -A\nNAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE\nfirst first-ingress <none> first.example.com 1.2.3.4 80, 443 14h\nsecond second-ingress <none> second.example.com 1.2.3.4 80, 443 5m\nRun Code Online (Sandbox Code Playgroud)\n我希望这对尝试迁移到 nginx ingress 的人有所帮助,而无需预先将所有 URL 指向单个公共 IP。如果需要,在此迁移步骤之后,您可以请求让所有 URL 仅指向一个 IP,然后您当然可以删除所有ingress-nginx-controller-*不再需要的服务。
| 归档时间: |
|
| 查看次数: |
8132 次 |
| 最近记录: |