如何使多个DNS指向Kubernetes中的一个服务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使多个DNS指向Kubernetes中的一个服务相关的知识,希望对你有一定的参考价值。
当我们使用docker-compose
时,我们可以通过links
将多个别名映射到一个容器/服务。例如,bucket1.s3
和bucket2.s3
是容器s3
的别名。现在,当我们转向kubernetes时,我正在尝试使用服务发现来做同样的事情并链接容器。
我现在能想到的是为每个桶提供一个服务,每个服务将指向同一个pod。这看起来很多工作。有没有办法让多个DNS映射到一个服务,所以bucket1.s3.namespace.svc.cluster.local
和bucket2.s3.namespace.svc.cluster.local
都可以解析为s3
服务?
我相信你可能想要的是一个映射到两个部署的服务,你可以有两个deployments,名称为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
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中提供数据。如果数据不同,为什么不具有2个具有不同DNS条目的部署。
如果您使用的是K8s 1.11或更高版本,您也可以在tweak the coredns ConfigMap
命名空间中使用kube-system
来获得您想要获得的内容,但根据RFC 1034,第3.6.2节中的DNS you can't have a single record map to two CNAMEs。您不能在Kubernetes中对IP进行硬编码,因为您的IP在创建/删除pod时总是会更改。
以上是关于如何使多个DNS指向Kubernetes中的一个服务的主要内容,如果未能解决你的问题,请参考以下文章