亚马逊 EKS ALB部署 TLS Ingress
先决条件
- AWS EKS 1.30+
- aws-load-balancer-controller
- 域名 SSL 证书
上传 SSL 证书到亚马逊 ACM
Amazon ACM 为你管理域名SSL证书,并在 AWS ELB、AWS Cloudfront、AWS Api-gateway等地进行HTTPS无缝集成。
首先需要将第三方的 SSL 证书导入到 。可以方便的使用 AWS 的 ACM
导入证书
TLS 证书选择第三方购买的 Nginx 的 PEM
类型的证书文件,包括 .pem
证书文件合 .key
私钥文件。
ACM 控制台获取 SSL 证书的 ARN
ACM 导入 .pem
证书文件时,需要拆分成 “证书正文” 和 “证书链”:
获取 ACM 证书的 arn
使用 TLS 证书为 Amazon EKS 应用程序激活 HTTPS 连接
apiVersion: v1
kind: Service
metadata:
name: web-nginx
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
type: NodePort
selector:
app: web
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: "web-nginx-ingress"
annotations:
# Below annotation is to specify if the loadbalancer is "internal" or "internet-facing"
alb.ingress.kubernetes.io/scheme: internet-facing
# TODO: Fill in with the ARN of your certificate.
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:xxxx:certificate/xxxxxx
# TODO: Fill in the listening ports.
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
# Set HTTP to HTTPS redirects. Every HTTP listener configured is redirected to below mentioned port over HTTPS.
alb.ingress.kubernetes.io/ssl-redirect: '443'
labels:
app: web
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: "web-nginx"
port:
number: 80
注释说明:
alb.ingress.kubernetes.io/scheme: internet-facing
此注释指定负载均衡器的类型。internet-facing
表示负载均衡器将面向互联网,能够接收来自公共互联网的流量。- 如果设置为
internal
则负载均衡器将仅在VPC内部可用。
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:xxxx:certificate/xxxxxx:
该注释用于指定 AWS Certificate Manager(ACM)中SSL/TLS 证书的ARN
(Amazon Resource Name)。这个证书将用于HTTPS流量的加密。您需要将 xxxx 替换为实际的 ARN,以确保 Ingress 能够正确引用该证书。alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
这个注释定义了负载均衡器监听的端口。这里指定了 HTTP 流量将通过80端口接收,而 HTTPS 流量将通过443端口接收。这使得负载均衡器能够处理来自这两个端口的请求。alb.ingress.kubernetes.io/ssl-redirect: '443'
此注释用于设置 HTTP 到 HTTPS 的重定向。它指示负载均衡器将所有通过HTTP(80端口)接收的流量重定向到HTTPS(443端口)。这有助于确保所有流量都通过安全的HTTPS协议进行传输,提高了应用程序的安全性。