Amazon-Web-Services

在 AWS 上使用 EKS 的 ALB 的 HTTP/2

  • May 20, 2019

我正在試驗 AWS EKS 並創建了以下設置:

  • 具有單個服務/pod/節點的 EKS 集群
  • AWS ALB 入口控制器
  • 白色的

我嘗試將 ALB 配置為:

  • 創建訪問日誌
  • 提供 HTTP/2 支持

我的 alb 入口控制器定義:

apiVersion: apps/v1
kind: Deployment
metadata:
 labels:
   app: alb-ingress-controller
 name: alb-ingress-controller
 namespace: kube-system
spec:
 replicas: 1
 selector:
   matchLabels:
     app: alb-ingress-controller
 strategy:
   rollingUpdate:
     maxSurge: 1
     maxUnavailable: 1
   type: RollingUpdate
 template:
   metadata:
     creationTimestamp: null
     labels:
       app: alb-ingress-controller
   spec:
     containers:
       - args:
           - --ingress-class=alb
           - --cluster-name=eks
         image: docker.io/amazon/aws-alb-ingress-controller:v1.1.2
         imagePullPolicy: Always
         name: server
         resources: {}
         terminationMessagePath: /dev/termination-log
     dnsPolicy: ClusterFirst
     restartPolicy: Always
     securityContext: {}
     terminationGracePeriodSeconds: 30
     serviceAccountName: alb-ingress
     serviceAccount: alb-ingress

我的服務和入口定義:

apiVersion: v1
kind: Service
metadata:
 name: my-app
spec:
 ports:
   - port: 5001
     targetPort: 5001
     protocol: TCP
 type: NodePort
 selector:
   app: my-app
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 name: "my-app"
 labels:
   app: my-app
 annotations:
   kubernetes.io/ingress.class: alb
   alb.ingress.kubernetes.io/scheme: internet-facing
   alb.ingress.kubernetes.io/load-balancer-attributes: "access_logs.s3.enabled=true,access_logs.s3.bucket=my-bucket,access_logs.s3.prefix=some-path"
   alb.ingress.kubernetes.io/load-balancer-attributes: "routing.http2.enabled=true"
spec:
 rules:
   - http:
       paths:
         - path: /*
           backend:
             serviceName: "my-app"
             servicePort: 5001

結果:

  • 正確創建 ALB 並正確路由流量
  • 但不支持 HTTP/2(儘管 AWS 控制台為 HTTP/2 顯示“啟用”,這是預設設置)
  • 並且 S3 中沒有 ALB 日誌(儘管提供了所有權限)

我檢查了 ALB 日誌(kubectl logs -n kube-system $(kubectl get po -n kube-system | egrep -o alb-ingress

$$ a-zA-Z0-9- $$+)) 並沒有發現任何錯誤消息或警告。 有沒有其他人讓這個工作?

在此期間,我已經解決了這兩個問題。快速總結,以防其他人遇到同樣的問題:

  • 所有 alb.ingress.kubernetes.io/load-balancer-attributes 需要組合在一個逗號分隔的語句中 -> 解決了 S3 日誌問題

alb.ingress.kubernetes.io/load-balancer-attributes: “access_logs.s3.enabled=true,access_logs.s3.bucket=bucket-name,access_logs.s3.prefix=some-prefix”

  • 需要為 HTTP/2 啟用 HTTPS -> 解決了 HTTP/2 問題

alb.ingress.kubernetes.io/listen-ports: '

$$ {“HTTP”:80,“HTTPS”:443} $$’ alb.ingress.kubernetes.io/certificate-arn: “arn:aws:acm:ap-southeast-1:1234567891011:certificate/some-UID”

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