在AWS上使用HTTPS向世界展示Kubernetes部署的方式是什么?

时间:2017-09-20 14:35:22

标签: amazon-web-services https kubernetes

假设我的Kubernetes集群(在AWS上运行)上运行了一个名为app的部署,其定义如下:

apiVersion: apps/v1beta1 # for versions before 1.6.0 use extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

(来源:https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#creating-a-deployment

我想使用AWS ELB将这些pod暴露给世界。此外,还需要(通常建议)通过HTTPS提供此服务。为方便起见,我想利用AWS的证书管理器(ACM)获取免费的常青证书,而不是自己购买和管理证书。

如果我尝试使用此命令创建服务来公开pod: kubectl expose deployment nginx-deployment --type=LoadBalancer --port=80 --target-port=80 --name=nginx-svc

创建了一个ELB,但它是一个TCP负载均衡器,完全不知道HTTP,我无法为其设置ACM证书。

如何创建服务,以便Kubernetes创建HTTP负载均衡器并将证书设置为它?

1 个答案:

答案 0 :(得分:1)

尽管没有很好的记录,但确实可以做到这一点。你可以在GitHub上看到负责它的模块的源代码:https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/aws/aws.go#L125

为了利用此功能,请创建一个YAML nginx-svc.yaml文件,如下所示:

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-1:<account number>:certificate/<certificate id>
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
spec:
  type: LoadBalancer
  ports:
  - port: 443
    targetPort: 80
  selector:
    app: nginx

并使用kubectl创建它: kubectl create -f nginx-svc.yaml

等等几分钟,你会好起来的!