【问题标题】:How to get HTTPS on AKS without ingress如何在没有入口的情况下在 AKS 上获取 HTTPS
【发布时间】:2019-03-31 08:25:32
【问题描述】:

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

我该怎么做?

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

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

我只想要带有证书的 HTTPS,没有其他任何改变,有没有简单的解决方案?

【问题讨论】:

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


    【解决方案1】:

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

    因此,您可以选择LoadBalancerNodePort 类型的服务。由于 Azure 负载均衡器是 layer 4,因此 LoadBalancer 类型不能直接与 TLS 一起使用。所以你必须使用Application Gateway,出于安全原因,最好使用internal load balancer

    由于您使用的是 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 负载均衡器。在幕后,负载均衡器将指向节点上的一个端口,在节点内,会有防火墙规则路由到您的容器。然后你可以配置Application GatewayHere's 一篇描述它的好文章,但使用端口 80,您必须更改它使用端口 443 并配置 TLS 证书,并且应用程序网关还支持 end to end TLS,以防您也想直接在您的应用程序上终止 TLS。

    另一个选项是 NodePort,你可以像这样运行:

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

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

    【讨论】:

    • 是的,我已经在使用带有 dns 和公共 IP 的 LoadBalancer 服务。我只为 https 添加了 Ingress,你的回答没有解决 https。
    • 我可以回答,但如果你投反对票,我没有动力回答,我宁愿删除我的答案:)
    • 嗯,当答案解决问题时,我会投票。我认为这样做也符合 SO 的精神,但如果您认为可以提供帮助,我会继续删除反对票
    • 您必须先编辑答案才能更改投票,但仍然认为这是合理的
    • 当然,让我改一下。谢谢
    【解决方案2】:

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

    【讨论】:

    • 这绝对是我正在寻找的东西,谢谢。当我真正可以得到一些工作时,我正在等待选择一个答案,但到目前为止这看起来最接近
    猜你喜欢
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2010-11-27
    相关资源
    最近更新 更多