配置 Ingress Manifest 將 HTTP 的流量導至 HTTPS

做法

使用以下語法,讓 ALB 將 HTTP 的流量導至 HTTPS:

1
alb.ingress.kubernetes.io/actions.${action-name}

修改 ingress.yaml 檔:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:xxxx:certificate/xxxxxx
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
spec:
rules:
- http:
paths:
- path: /*
backend:
serviceName: ssl-redirect
servicePort: use-annotation
- path: /*
backend:
serviceName: my-service
servicePort: 80
  • 註解 alb.ingress.kubernetes.io/listen-ports 必須至少包含 [{"HTTP": 80}, {"HTTPS":443}] 兩個埠號。
  • 註解 alb.ingress.kubernetes.io/certificate-arn 必須設置憑證。
  • 動作 ssl-redirect 必須在規則的第一個,讓 ALB 優先解析。

套用設定。

1
kubectl apply -f ingress.yaml

查看 Ingress 狀態。

1
kubectl describe ingress my-service

參考資料