如何在没有入口的情况下在AKS上获取HTTPS

时间:2018-10-26 14:37:00

标签: nginx https kubernetes azure-aks nginx-ingress

我的问题很简单。我有一个带有LoadBalancer服务的AKS部署,该服务需要使用带有证书的HTTPS。

我该怎么做?

我在网上看到的所有内容都特别涉及Ingress和nginx-ingress。

但是我的部署不是网站,而是一个Dropwizard服务,在一个端口上具有REST API,在另一个端口上具有管理服务。我不想将端口映射到端口80上的路径,我想保持端口不变。为什么将HTTPS绑定到入口?

我只希望HTTPS带有证书,并且没有其他更改,是否有一个简单的解决方案?

2 个答案:

答案 0 :(得分:2)

一个带有nginx且具有正确证书(可能是通过Secret或ConfigMap加载的)的sidecar容器将完成这项工作而不会进入。使用Thisnginx-ssl-proxy container似乎是一个很好的例子。

答案 1 :(得分:1)

是的,在撰写本文时,没错,Ingress目前可以在端口80或端口443上运行,因为nginxTraefik,{{3} }等都可以在不同的端口上监听。

因此,您只能使用haproxyLoadBalancer类型的服务。由于Azure负载平衡器为NodePort,因此类型LoadBalancer不能直接与TLS一起使用。因此,您将必须使用layer 4,出于安全原因,最好使用Application Gateway

由于您使用的是Azure,因此可以运行以下操作(假设您的K8s群集配置了使用Azure云提供程序的正确方法,可以使用--cloud-provider选项或cloud-controller-manager): / p>

$ 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负载平衡器。在幕后,负载均衡器将指向节点上的端口,并且在节点内,将有防火墙规则将路由到您的容器。然后,您可以配置internal load balancerApplication Gateway不错的文章,但使用端口80,您将不得不使用端口443进行更改,并配置TLS证书,并且Application Gateway还支持Here's,以防您直接终止TLS。您的应用也是如此。

另一个选项是NodePort,您可以运行以下命令:

$ kubectl expose deployment <deployment-name> --type=NodePort

然后,Kubernetes将在所有节点上选择一个随机端口,您可以在其中向<your-port>上的服务发送流量。因此,在这种情况下,您将必须使用TLS或侦听TLS <your-port>并将其转发到所有节点上的NodePort的流量源手动创建负载均衡器,该负载均衡器可以是haproxy之类的东西, nginx,Traefik或其他支持终止TLS的东西。而且,您还可以使用end to end TLS直接转发到您的节点端口,换句话说,定义一个侦听器,用于侦听群集的NodePort。