Kubernetes暴露多个Pod

时间:2018-09-13 08:34:07

标签: docker dns kubernetes containers

我有一个Kubernetes集群,其中有来自不同图像的多个Pod。

我希望能够公开每个吊舱,以便能够使用外部DNS记录(在群集外部)访问它们。

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

http://pod1.mydomain.com

http://pod2.mydomain.com

http://pod3.mydomain.com

有办法吗?

谢谢

2 个答案:

答案 0 :(得分:2)

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

  1. 为Kubernetes添加适当的权利,以便他可以在Route53(Kubernetes安装和external-dns插件安装的一部分)中创建ELB和DNS记录
  2. 为您的广告连播提供适当的服务

示例服务如下:

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

答案 1 :(得分:1)

外部dns(https://github.com/kubernetes-incubator/external-dns)被设计为执行此操作,您用您要为其提供的dns名称注释您的服务,而外部dns为您创建相关的dns条目。