7

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

我该怎么做呢?

我在网上看到的一切都特别涉及 Ingress 和 nginx-ingress。

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

我只想要带有证书的 HTTPS,没有更多改变,有没有简单的解决方案?

4

2 回答 2

3

带有正确证书(可能从 Secret 或 ConfigMap 加载)的带有 nginx 的 sidecar 容器将在没有入口的情况下完成这项工作。似乎是一个很好的例子,使用nginx-ssl-proxy container

于 2018-10-26T20:06:40.127 回答
2

是的,在撰写本文时,Ingress 目前将在端口 80 或端口 443 上工作,可能它可以扩展为使用任何端口,因为nginxTraefikhaproxy 等都可以在不同的端口上侦听。

因此,您只能选择一种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。

于 2018-10-26T15:45:03.910 回答