使用docker-compose
时,我们可以通过links
将多个别名映射到一个容器/服务。例如,bucket1.s3
和bucket2.s3
是容器s3
的别名。现在,当我们转向kubernetes时,我正在尝试做同样的事情并使用服务发现链接容器。
我现在可以想到的是,每个存储桶都有一个服务,每个服务都指向同一吊舱。这项工作似乎很多。是否有办法将多个DNS映射到一项服务,以便bucket1.s3.namespace.svc.cluster.local
和bucket2.s3.namespace.svc.cluster.local
都可以解析为s3
服务?
答案 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总是会更改。