繁体   English   中英

在AWS上使用HTTPS将Kubernetes部署向世界公开的方式是什么?

[英]What's the way to expose a Kubernetes deployment to the world using HTTPS on AWS?

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

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将这些吊舱展示给世界。 此外,通过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负载平衡器并将证书设置为该负载平衡器?

即使没有充分记录,也确实可以这样做。 您可以在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

等待几分钟,您就可以开始了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM