在Kubernates部署中如何使ELB附加到route53中的域名

时间:2018-12-24 09:55:30

标签: kubernetes amazon-elb

当前,我正在进行部署并使用类型loadbalancer创建服务。我可以通过创建的ELB访问POD。然后使用路由53,我使用别名将ELB附加到k8-test.abc.com。下面是代码段。

apiVersion: v1
kind: Service
metadata:
  name: %APP_FULL_NAME%-service-lb-http
  labels:
    appname: %APP_FULL_NAME%
    stage: %APP_ENV%
    component: app-kube-aws-elb
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "True"
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-east-1:XXXXXXXXXXXXX:certificate/XXXXXXXXXXXXXXX
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http

spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 443
    targetPort: 8080
    protocol: TCP
  selector:
    appname: %APP_FULL_NAME%
    stage: %APP_ENV%

但是我想知道有什么方法可以对部署和将要创建的ELB进行一些更改,并在创建时自动附加到k8-test.abc.com上。

2 个答案:

答案 0 :(得分:1)

有一个名为external-dns的孵化器项目(请阅读:您可以使用它,但不要破坏它,不要抱怨)。我自己还没有使用过它,但是看起来它可以满足您的要求。在其他DNS提供商中,它还提供对Route53的支持。

设置完成后(此处为the documentation on how to set-up external-dns on AWS),您可以使用external-dns.alpha.kubernetes.io/hostname批注为服务定义DNS名称:

apiVersion: v1
kind: Service
metadata:
  name: %APP_FULL_NAME%-service-lb-http
  labels:
    appname: %APP_FULL_NAME%
    stage: %APP_ENV%
    component: app-kube-aws-elb
  annotations:
    external-dns.alpha.kubernetes.io/hostname: k8-test.abc.com
    service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "True"
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-east-1:XXXXXXXXXXXXX:certificate/XXXXXXXXXXXXXXX
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 443
    targetPort: 8080
    protocol: TCP
  selector:
    appname: %APP_FULL_NAME%
    stage: %APP_ENV%

这将自动创建相应的DNS记录,这些记录将DNS名称k8-test-abc.com别名为您的ELB。

答案 1 :(得分:0)

默认情况下,它不是自动的。您将为ELB获得一个外部端点,然后必须将route53指向它。

这可能意味着如果您重新创建服务(尽管不是部署),则必须再次进行指向,因此您可以坚持滚动升级以避免进行大量指向。

不过,还有其他一些方法可以避免这种情况,包括NLB,Ingress和外部DNS孵化器项目。外部DNS方法将自动设置route53。 Ingress和NLB选项仍然涉及route53,但至少要确保只需要执行一次。有关Ingress和NLB方法的更多信息,请参见SO问题How to have the static ELB endpoint for kubernates deployments,我特别建议您看一下Ingress,因为它还将为您将来提供使用路径和标头应用​​路由规则的灵活性,并且只需要设置一次ELB和route53整个集群(这意味着您只需支付一个ELB)。