假设我的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负载均衡器并将证书设置为它?
答案 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