【问题标题】:Kubernetes expose multiple podsKubernetes 暴露多个 pod
【发布时间】:2019-02-17 22:52:09
【问题描述】:

我有一个 Kubernetes 集群,其中包含来自不同映像的多个 pod。

我希望能够公开这些 pod,以便能够使用外部 DNS 记录(集群外部)访问它们。

例如: 假设我有 3 个 pod(pod1、pod2、pod3),我希望能够通过这种方式从集群外部访问它们:

http://pod1.mydomain.com

http://pod2.mydomain.com

http://pod3.mydomain.com

有办法吗?

谢谢

【问题讨论】:

  • 您是在云端还是本地 kubernetes 部署?
  • 我正在使用 AWS。如有必要,我可以自己添加 DNS 记录。

标签: docker dns kubernetes containers


【解决方案1】:

在 AWS 中,您可以使用 ELB 轻松公开 POD - Kubernetes 可以自动为您创建适当的 ELB。这意味着 Kubernetes 生成 ELB,然后使用节点端口将其附加到适当的服务。当您拥有 ELB 时,您可以使用 GarMan 提出的 external-dns 插件,该插件可以使用 AWS Route53 集成将 DNS 记录附加到这些 ELB。所以你需要:

  1. 为 Kubernetes 添加适当的权限,以便他可以在 Route53 中创建 ELB 和 DNS 记录(Kubernetes 安装和 external-dns 插件安装的一部分)
  2. 将适当的服务附加到您的 pod

示例服务如下所示:

apiVersion: v1
kind: Service
metadata:
  name: public-pod1
  namespace: your-deployment
  labels:
    app: pod1
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
    service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
    external-dns.alpha.kubernetes.io/hostname: pod1.mydomain.com.
spec:
  type: LoadBalancer
  loadBalancerSourceRanges:
  - 0.0.0.0/0 # Ingress SG for your ELB
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80 #That should match your app's port
  selector:
    app: pod1

【讨论】:

    【解决方案2】:

    external-dns (https://github.com/kubernetes-incubator/external-dns) 就是为此而设计的,你用你想给它们的 dns 名称来注释你的服务,然后 external-dns 会为你创建相关的 dns 条目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-20
      • 2016-11-14
      • 1970-01-01
      • 2021-05-13
      • 2020-06-18
      • 2018-09-30
      • 1970-01-01
      • 2018-05-22
      相关资源
      最近更新 更多