【问题标题】:Reach service through multiple internal addresses in Kubernetes通过 Kubernetes 中的多个内部地址访问服务
【发布时间】:2021-02-11 12:18:15
【问题描述】:

默认情况下,在 Kubernetes 中,部署服务时会创建一个内部地址。可以通过以下地址到达该服务:my-svc.my-namespace.svc.cluster-domain.example(doc reference)

我想在部署此服务时为其添加更多内部地址(我使用 helm 来部署我的服务)。我希望能够通过my-svcmy-svc-1my-svc-2 访问相同的服务。我想知道是否可以将这些别名添加到部署过程中,以便它自动为同一地址生成多个条目。

作为一种解决方法,我读到我可以使用 CoreDNS 并添加 CNAME 条目,但这绝对不是最佳选择,因为我不知道在部署服务时是否可以将这些条目自动添加到 CoreDNS。如果可能的话,我很高兴知道如何实现。

【问题讨论】:

    标签: kubernetes kubernetes-helm kube-dns coredns


    【解决方案1】:

    Manuel 提到的解决方案是正确的。我测试了它并且它有效。我使用了以下 yamls:

    常规服务公开:

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        run: my-svc
      name: my-svc
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        run: my-svc
    

    外部名称服务:

    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: my-svc-1
    spec:
      type: ExternalName
      externalName: my-svc.default.svc.cluster.local
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: my-svc-2
    spec:
      type: ExternalName
      externalName: my-svc.default.svc.cluster.local
    

    正如所料,ExternalName 类型服务创建指向my-svc 的 CNAME 记录

    $ dig my-svc-2 +search
    
    ;; QUESTION SECTION:
    ;my-svc-2.default.svc.cluster.local. IN A
    
    ;; ANSWER SECTION:
    my-svc-2.default.svc.cluster.local. 13 IN CNAME my-svc.default.svc.cluster.local.
    my-svc.default.svc.cluster.local. 13 IN A       10.100.222.87
    

    【讨论】:

    • 感谢您测试我的假设。
    【解决方案2】:

    我还没有尝试过,但也许你可以为 my-svc-1、my-svc-2 添加服务类型:ExternalName 并让它们指向 my-svc.my-namespace.svc.cluster- domain.example.

    在此处查看文档:service-external-name

    【讨论】:

    • 非常有趣,我会试试看,如果可行,我会验证你的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2022-11-17
    • 2019-12-30
    • 2013-12-03
    • 1970-01-01
    相关资源
    最近更新 更多