【问题标题】:How to make the ELB attach to a domain name in route53 in Kubernates deployments如何在 Kubernetes 部署中使 ELB 附加到路由 53 中的域名
【发布时间】:2018-12-24 20:00:58
【问题描述】:

目前我正在使用负载均衡器类型进行部署和创建服务。我可以通过创建的 ELB 访问 POD。然后使用路由 53,我使用别名将 ELB 与 k8-test.abc.com 连接起来。下面是sn-p。

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。

【问题讨论】:

    标签: kubernetes amazon-elb


    【解决方案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。

    【讨论】:

    • 谢谢@helmbert。我会试试这个。
    【解决方案2】:

    默认情况下它不会是自动的。您将获得 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 付费)。

    【讨论】:

    • 你看我使用的代码和这里提到的一样。 stackoverflow.com/questions/53880479/… 我也已经实现了入口。所以架构是这样的。我有 ngnix pod-> 映射到 ngnix 服务 - 映射到 ngnix 入口。现在我正在使用 ELB 端点访问该入口,该端点链接到我在路由 53 中的域名。但是正如您正确指出的那样,如果我重新创建服务,我必须再次指出。这就是为什么我寻找一个在创建时直接绑定 ELB 端点的选项
    • 如果您可以使用孵化器中的项目,那么外部 DNS 是一个不错的选择。就我个人而言,我只部署一次入口控制器及其服务,之后就不再更改它。
    • 我会尝试那个孵化器项目,但我正在寻找一些可靠的过程(如果有的话)。顺便说一句,你有相同的架构吗?我的意思是使用 typeloadbalancer 部署入口控制器及其服务,并在路由 53 中使用 ELB 端点。?
    • 是的,我从事 Activiti 项目 - 我们有一个示例,我们推荐 Ingress 和 DNS 指向它github.com/Activiti/activiti-cloud-charts/tree/master/…,我们有运行它的集群,包括 AWS 集群。
    猜你喜欢
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 2017-10-28
    • 2020-09-13
    • 1970-01-01
    • 2017-08-19
    • 2020-02-11
    相关资源
    最近更新 更多