Amazon-Web-Services

AWS kubernetes 負載均衡器在埠 443 上終止 SSL 並轉發到埠 80 上的服務

  • April 22, 2019

我正在嘗試使用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

引用自:https://serverfault.com/questions/958453