当前,我正在进行部署并使用类型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上。
答案 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)。