Amazon-Web-Services
AWS kubernetes 負載均衡器在埠 443 上終止 SSL 並轉發到埠 80 上的服務
我正在嘗試使用Nginx 入口控制器在 AWS 中設置我的 EKS 集群。
Nginx 入口控制器創建一個 LoadBalancer 類型的服務,該服務又創建一個映射到服務節點埠的 ELB 實例。
我想讓 SSL 證書由 AWS 管理,而不是 kubernetes 集群,所以我將它導入 AWS Certificate Manager 並在 nginx 服務中添加註釋:
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: <certificate_arn>
到目前為止,它是標準的東西。負載均衡器現在正在執行 SSL 終止,並且它與集群之間的後續通信是未加密的,這正是我想要的。唯一的問題是,而不是這個:
[Client] -> HTTPS (443) -> [ELB (SSL termination)] -> HTTP (80) -> [Service]
我明白了
[Client] -> HTTPS (443) -> [ELB (SSL termination)] -> HTTP (443) -> [Service]
如您所見,ELB 沒有將埠從 443 更改為 80,並且 Nginx pod 拒絕了通信,因為它在埠 443 上接收了未加密的流量。
我用 SSL/TCP ELB 嘗試了類似的事情,但出現了同樣的問題。
我搜尋但找不到任何方法,如何告訴 ELB 將未加密的流量發送到埠 80。有什麼想法嗎?
謝謝!
targetPort: http
即使在使用443
埠時,您也需要配置 Ingress 服務以使用。以下是將Nginx Ingress 和 Amazon ELB 與第 7 層 (HTTP/HTTPS) 偵聽器一起使用的範例:
kind: Service apiVersion: v1 metadata: name: ingress-nginx namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx annotations: service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:us-west-2:XXXXXXXX:certificate/XXXXXX-XXXXXXX-XXXXXXX-XXXXXXXX" service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http" service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https" service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "60" spec: type: LoadBalancer selector: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx ports: - name: http port: 80 targetPort: http - name: https port: 443 targetPort: http # <--- PAY ATTENTION HERE