2017-09-20 34 views
0

假設我有一個名爲app我Kubernetes集羣(這是在AWS上運行),它被定義爲這樣的運行部署:在AWS上使用HTTPS向全球公開Kubernetes部署的方式是什麼?

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)獲得免費的常綠證書,而不是自己購買和管理證書。

如果我嘗試通過使用此命令創建服務,露出莢: kubectl expose deployment nginx-deployment --type=LoadBalancer --port=80 --target-port=80 --name=nginx-svc

的ELB被創建,但它是一個TCP負載均衡,完全不知道HTTP的,我無法設置的ACM證書。

如何創建服務,讓Kubernetes創建HTTP負載平衡器並將其設置爲我的證書?

+0

我試圖自己解決同樣的問題。我也沒有答案,但我建議你考慮創建一個入口https://kubernetes.io/docs/concepts/services-networking/ingress/。入口將創建從外部世界到您的羣集的路由,並且它包括對您的TLS證書的支持。 – RobotNerd

+0

謝謝他的回覆。我實際上已經想通了,閱讀下面,讓我知道它是否適合你 –

回答

0

即使沒有很好的記錄,它確實有可能做到這一點。你可以在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

等幾分鐘,你會很好去!

相關問題