是的,在撰写本文时,Ingress 目前将在端口 80 或端口 443 上工作,可能它可以扩展为使用任何端口,因为nginx、Traefik、haproxy 等都可以在不同的端口上侦听。
因此,您只能选择一种LoadBalancer
或一种NodePort
服务。类型 LoadBalancer 不能直接与 TLS 一起使用,因为 Azure 负载均衡器是第 4 层。因此,您将不得不使用应用程序网关,并且出于安全原因,最好使用内部负载均衡器。
由于您使用的是 Azure,因此您可以运行类似这样的操作(假设您的 K8s 集群配置正确,可以使用 Azure 云提供商,--cloud-provider
选项或 cloud-controller-manager):
$ cat <<EOF
apiVersion: v1
kind: Service
metadata:
name: your-app
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
type: LoadBalancer
ports:
- port: <your-port>
selector:
app: your-app
EOF | kubectl apply -f -
这将在您喜欢的服务端口上创建一个 Azure 负载均衡器。在幕后,负载均衡器将指向节点上的一个端口,在节点内,会有防火墙规则路由到您的容器。然后您可以配置应用程序网关。这是一篇描述它的好文章,但使用端口 80,您必须更改它使用端口 443 并配置 TLS 证书,并且应用程序网关还支持端到端 TLS,以防您也想直接在您的应用程序上终止 TLS。
另一个选项是 NodePort,您可以运行如下内容:
$ kubectl expose deployment <deployment-name> --type=NodePort
然后 Kubernetes 将在所有节点上选择一个随机端口,您可以将流量发送到正在侦听的服务<your-port>
。因此,在这种情况下,您必须手动创建一个带有 TLS 的负载均衡器或一个监听 TLS<your-port>
并将其转发到所有节点上的 NodePort 的流量源,这个负载均衡器可以是 haproxy、nginx、Traefik 之类的任何东西else 支持终止 TLS。您还可以使用应用程序网关直接转发到您的节点端口,换句话说,定义一个侦听器来侦听集群的 NodePort。