Kubernetes 内部 nginx 入口控制器,带 SSL 终止 & ssl-passthrough

Kubernetes internal nginx ingress controller with SSL termination & ssl-passthrough

我对使用 helm 图表部署容器还很陌生,而且我也从未使用过 nginx 控制器或入口控制器。 但是,我被要求研究改进我们的内部 nginx 入口控制器以允许 SSL-passthrough.

现在我们有外部(public 面向)和内部控制器。其中 public 的允许 SSL-passthrough,而内部的允许 SSL-termination。 我还被告知 nginx 是一个反向代理,它基于 URL.

中的 headers 工作。

我希望有人能帮我解决我为内部入口控制器准备的这张掌舵图。 目前我的印象是不可能在同一个入口控制器上同时使用 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

我可以去混合注释吗?还是注解只关心注解的来源'top domain level'? 例如:

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

两者都来自域 kubernetes.io,还是 sub-domain 有区别? 我的意思是:https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md 该页面未显示任何 service.beta 注释 ..

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

我主要是在寻找有关如何在不破坏内部入口控制器上的 SSL-termination 的情况下使 SSL-passthrough 正常工作的答案。 但是,就我的其他问题而言,任何额外信息以获取更多见解和知识也将不胜感激:)

所以我找到了我自己问题的答案: 注释似乎是 'configuration items'。我使用引号是因为我找不到更好的术语。 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 天的 researching/searching 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/

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

从这里您可以了解如何在没有 SSL 终止的情况下将 HTTPS 流量重定向到 pod