Amazon-Web-Services
在 AWS 上使用 EKS 的 ALB 的 HTTP/2
我正在試驗 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”