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

如何在Kubernetes中使多个DNS指向一个服务,dns,kubernetes,docker-compose,Dns,Kubernetes,Docker Compose,当我们使用docker compose时,我们可以通过链接将多个别名映射到一个容器/服务。例如,bucket1.s3和bucket2.s3是容器s3的别名。现在,当我们转到kubernetes时,我正尝试做同样的事情,并使用服务发现链接容器 我现在能想到的是,每个桶有一个服务,每个服务将指向同一个吊舱。这似乎需要做很多工作。有没有办法将多个DNS映射到一个服务,因此bucket1.s3.namespace.svc.cluster.local和bucket2.s3.namespace.svc.cl

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


我现在能想到的是,每个桶有一个服务,每个服务将指向同一个吊舱。这似乎需要做很多工作。有没有办法将多个DNS映射到一个服务,因此
bucket1.s3.namespace.svc.cluster.local
bucket2.s3.namespace.svc.cluster.local
都可以解析为
s3
服务?

我相信您可能想要的是一个服务映射到两个部署,您可以使用bucket1和bucket2两个名称,并使用一个标签标记它们
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


但另一个问题是,你为什么想要这个?如果bucket1和bucket2包含不同的信息/数据

对于Kubernetes,通常情况下,如果数据相同,您将部署一个具有多个POD/副本的部署,以服务bucket1或bucket2中的数据。如果数据不同,为什么不使用两个具有不同DNS条目的部署呢


如果您使用的是K8s 1.11或更高版本,您也可以在
kube系统
名称空间中,根据RFC 1034第3.6.2节的规定,获取您试图获取的DNS。您也不能在Kubernetes中硬编码IP,因为在创建/删除POD时,IP总是会发生变化。

是的,bucket1和bucket2的数据不同。因此,在这种情况下,如果k8s版本为1.11或更高版本,正确的方法是调整coredns?如果您的版本如@Rico所述,为1.11或更高版本,则使用自定义DNS条目。
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