簡體   English   中英

AWS上的Kubernetes:使用Nginx-ingress + cert-manager保留客戶端IP

[英]Kubernetes on AWS: Preserving Client IP with nginx-ingress + cert-manager

我們使用此指南通過LetsEncrypt設置了帶有nginx-ingress並結合cert-manager Kubernetes,以自動獲取和使用SSL證書用於入口域: https ://medium.com/@maninder.bindra/auto-provisioning-of-letsencrypt- tls證書用於kubernetes,服務已部署到aks-52fd437b06b0 結果是,每個Ingress都定義了自己的SSL證書,該證書由cert-manager自動提供。

這一切都很好,但是有一個問題,流量的源IP地址已丟失給Pods中的應用程序。

建議使用注釋來應用於nginx-ingress控制器服務service.beta.kubernetes.io/aws-load-balancer-backend-protocol: '*' 這具有保留源IP地址的作用。 但是,這樣做會破壞SSL:

An error occurred during a connection to {my.domain.com}. SSL received a record that exceeded the maximum permissible length. Error code: SSL_ERROR_RX_RECORD_TOO_LONG

我的頭開始旋轉。 有誰知道解決這個問題的任何方法(在我看來這是一個普遍的要求)?

入口配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-http-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
spec:
  rules:
  - host: my.host.com
    http:
      paths:
      - path: /
        backend:
          serviceName: my-http-service
          servicePort: 80
  tls:
  - hosts:
    - "my.host.com"
    secretName: malcolmqa-tls

正如@dom_watson在評論中提到的那樣,將參數controller.service.externalTrafficPolicy=Local添加到Helm安裝配置解決了該問題,因為Local值保留了客戶端源IP,因此網絡流量將到達Kubernetes集群中的目標Pod。 在Kubernetes官方指南中找到更多信息。

helm upgrade my-nginx stable/nginx-ingress --set rbac.create=true --set controller.service.externalTrafficPolicy=Local

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM