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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使多个DNS指向Kubernetes中的一个服务相关的知识,希望对你有一定的参考价值。

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

我现在能想到的是为每个桶提供一个服务,每个服务将指向同一个pod。这看起来很多工作。有没有办法让多个DNS映射到一个服务,所以bucket1.s3.namespace.svc.cluster.localbucket2.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中的一个服务的主要内容,如果未能解决你的问题,请参考以下文章

使客户端自动指向 DC 用于 DNS

Kubernetes 中的 NGINX 无法解析 DNS

如何配置kubernetes dns

Kubernetes DNS支持

剖析kubernetes集群内部DNS解析原理

09-kubernetes中的域名解析流程