创建service
使用 EKS 时,它通过 AWS 负载均衡器使用 http 公开。
kubectl apply -f service.yaml
- 将创建一个由 EKS 管理的负载均衡器,并且无法修改。任何修改,无论有效与否,都将被 AWS 在某些时候覆盖。
我正在尝试将服务公开为 HTTPS。
修改 aws 负载均衡器以使用 acm 证书在 https 中侦听 443,将提供一个临时解决方案,当 EKS 将负载均衡器刷新回“出厂设置”时,该解决方案将被重置。
最好的方法似乎是创建一个ingress
可以支持 HTTPS 的负载均衡器。请遵循以下文章:
https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html
https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html
listen-ports
并被certificate-arn
添加到 ingress yaml 中
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: game-2048
name: ingress-2048
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80},{"HTTPS":443}]' # Added by me
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:411686525067:certificate/8adf7812-a1af-4eae-af1b-ea425a238a67
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-2048
port:
number: 80
EKS
将创建一个ALB
具有主机名的,例如:k8s--------d4ees4dc9b-1296497080.eu-central-1.elb.amazonaws.com
该主机名位于 下amazonaws.com
。
当添加到 yaml 配置时,certificate-arn
将创建具有端口 443 监听器的 ALB,并附加指定的 ACM 证书。
但是,由于 ALB 主机位于amazonaws.com
域下,证书不匹配,我又回到了原点。
如何让 EKS 创建 https ALB?
在更高级别上,我管理 DNS并将为 ALB 主机cloudflare
创建 CNAME 代理记录api.mydomain.com
k8s--------d4ees4dc9b-1296497080.eu-central-1.elb.amazonaws.com
为了使 DNS 代理正常工作,双方都必须支持 https。
答案1
问题中描述的配置就是您需要获得SSL endpoint
一旦配置了监听 https/443 的 ALB 以及适合alb.ingress.kubernetes.io/certificate-arn
您的非 aws 的ALB domain.com
。
A代理人domain.com
从到 的CNAME 记录(cloudflare)k8sd4ees4dc9b-1296497080.eu-central-1.elb.amazonaws.com
将启用domain.com
通过 ALB 到 的连接,并且具有 ALB 提供的有效 SSL 认证。
使用 SSL 连接到 aws 生成地址将调用 SSL 不匹配警告,这是正常的,也理应如此。
另一种选择是使用 aws PCA
,但这需要更复杂的配置。