【问题标题】:Kubernetes internal nginx ingress controller with SSL termination & ssl-passthrough具有 SSL 终止和 ssl-passthrough 的 Kubernetes 内部 nginx 入口控制器
【发布时间】:2020-02-24 18:45:20
【问题描述】:

我对使用 helm 图表部署容器非常陌生,而且我也从未使用过 nginx 控制器或入口控制器。 但是,我被要求考虑改进我们的内部 nginx 入口控制器以允许 SSL 直通。

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

我希望有人可以帮助我解决这个用于内部入口控制器的掌舵图。 目前我的印象是,在同一个入口控制器上具有 SSL 终止和 SSL-passthrough 是不可能的。 我自己回答了这个: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 直通工作的答案。 但是,就我的其他问题而言,获得更多洞察力和知识的任何额外信息也将不胜感激:)

【问题讨论】:

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


    【解决方案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 天的时间研究/搜索网络和 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 直通,我希望这也能有所帮助。

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-15
      • 2021-02-03
      • 2021-03-07
      • 2020-08-14
      • 1970-01-01
      • 2017-11-09
      • 2019-01-26
      • 1970-01-01
      相关资源
      最近更新 更多