如何在Kubernetes中将多个DNS指向一项服务

时间:2018-10-15 15:08:18

标签: dns kubernetes docker-compose

使用docker-compose时,我们可以通过links将多个别名映射到一个容器/服务。例如,bucket1.s3bucket2.s3是容器s3的别名。现在,当我们转向kubernetes时,我正在尝试做同样的事情并使用服务发现链接容器。

我现在可以想到的是,每个存储桶都有一个服务,每个服务都指向同一吊舱。这项工作似乎很多。是否有办法将多个DNS映射到一项服务,以便bucket1.s3.namespace.svc.cluster.localbucket2.s3.namespace.svc.cluster.local都可以解析为s3服务?

1 个答案:

答案 0 :(得分:2)

我相信您可能想要的是将一个服务映射到两个部署,您可以拥有两个名称分别为bucket1和bucket2的deployments,并用一个标签app: buckets标记它们,然后使用一个带有选择器的服务包括那个标签。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: bucket1
  labels:
    app: buckets
spec:
  replicas: 3
  selector:
    matchLabels:
      app: buckets
  template:
    metadata:
      labels:
        app: buckets
    spec:
      containers:
      - name: bucket-container
        image: bucketimage
        ports:
        - containerPort: 80

apiVersion: apps/v1
kind: Deployment
metadata:
  name: bucket2
  labels:
    app: buckets
spec:
  replicas: 3
  selector:
    matchLabels:
      app: buckets
  template:
    metadata:
      labels:
        app: buckets
    spec:
      containers:
      - name: bucket-container
        image: bucketimage
        ports:
        - containerPort: 80

kind: Service
apiVersion: v1
metadata:
  name: s3
spec:
  selector:
    app: buckets
  ports:
  - protocol: TCP
    port: 80

但是另一个问题是,为什么要拥有那个?如果bucket1和bucket2都包含不同的信息/数据。

一般来说,使用Kubernetes,您将有一个带有多个Pod /副本的部署,假设数据相同,则可以在bucket1或bucket2中提供数据。如果数据不同,为什么不进行两个具有不同DNS条目的部署。

如果您使用的是K8s 1.11或更高版本,则还可以在kube-system名称空间中tweak the coredns ConfigMap来获取您要尝试获取的内容,但是按照DNS you can't have a single record map to two CNAMEs RFC 1034,第3.6.2节。您也无法在Kubernetes中对IP进行硬编码,因为在创建/删除Pod时,IP总是会更改。