具有SSL终止和ssl-passthrough的Kubernetes内部Nginx入口控制器

时间:2019-10-29 13:59:22

标签: ssl nginx kubernetes kubernetes-helm nginx-ingress

我对使用头盔图来部署容器非常陌生,而且我也从未使用过nginx控制器或入口控制器。 但是,有人要求我研究改进内部的Nginx入口控制器,以允许SSL直通。

现在,我们有外部(面向公众)和内部控制器。公共的服务器允许SSL直通,内部的服务器允许SSL终止。 有人还告诉我nginx是反向代理,它基于URL中的标头工作。

我希望有人可以帮我解决这个内部入口控制器的头盔图。 目前,我的印象是不可能在同一入口控制器上具有SSL终止和SSL直通。 我自己回答了这个问题:https://serversforhackers.com/c/tcp-load-balancing-with-nginx-ssl-pass-thru

我们当前的(内部)入口代码:

---

rbac:
  create: true

controller:
  ingressClass: nginx-internal
  service:
    annotations:
      service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
      service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:eu:110:certificate/62-b3
      service.beta.kubernetes.io/aws-load-balancer-ssl-ports: !!str 443
      service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
      service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: !!str 3600

    targetPorts:
      https: 80

  replicaCount: 3

defaultBackend:
  replicaCount: 3

我可以简单地添加以下内容吗? :

controller:
    extraArgs:
        enable-ssl-passthrough: ""

注意:上面的代码是我们在外部入口控制器上使用的代码。

此外,我发现了这一点: Ingress and SSL Passthrough

我可以只混合注释吗?还是注解仅关注注解的“顶级域”? 例如:

service.beta.kubernetes.io
nginx.ingress.kubernetes.io

两者都来自域kubernetes.io,还是子域有所作为? 我的意思是:https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md 该页面上没有显示任何service.beta批注..

注释中的extraArg ssl-passthrough配置和ssl-passthrough配置之间有什么区别?

我主要是在寻找如何在不破坏内部入口控制器上SSL终止的情况下实现SSL直通的答案。 但是,只要我提出其他问题,就可以获得更多的见解和知识的任何额外信息也将非常感激:)

2 个答案:

答案 0 :(得分:1)

因此,我找到了自己的问题的答案: 注释似乎是“配置项”。我使用引号是因为找不到更好的术语。 您可以在extraArgs参数中将任何参数传递给控制器​​,就好像它是命令行参数一样。 而且我认为可以肯定地说,批注可以是同一顶级域中的任何一个。我没有找到不是来自另一个域的任何文件,然后是kubernetes.io

要使我的入口控制器与SSL终止控制器并排工作,头盔图表如下所示:

---
rbac:
  create: true

controller:
  ingressClass: nginx-internal-ssl-passthrough
  service:
    annotations:
      nginx.ingress.kubernetes.io/ssl-passthrough: "true"
      service.beta.kubernetes.io/aws-load-balancer-type: nlb
      service.beta.kubernetes.io/aws-load-balancer-internal: "true"
      service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
      service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags: "tag3=value3, tag3=value3, tag3=value3, tag3=value3"
    targetPorts:
      https: 443
  replicaCount: 2
  extraArgs:
    enable-ssl-passthrough: ""

defaultBackend:
  replicaCount: 2

请我花大约2天时间研究/搜索Web和6部署,以使整个设置与AWS nlb,启用ssl-passthrough,跨区域负载平衡等一起使用。但是找到以下页面后,它运行起来非常快: https://kubernetes.github.io/ingress-nginx/deploy/ https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/ https://kubernetes.io/docs/concepts/services-networking/service/

最后一页对我有很大帮助。如果其他人可以为公共或私有连接部署SSL终止和SSL直通,我希望这也会有所帮助。

答案 1 :(得分:0)

从这里您可以了解如何在不终止 SSL 的情况下将 HTTPS 流量重定向到 Pod https://stackoverflow.com/a/66767691/1938507