【Kubernetes】通过ConfigMap修改容器的DNS

时间:2022-07-22
本文章向大家介绍【Kubernetes】通过ConfigMap修改容器的DNS,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

业务容器需要在 A 集群解析 B 集群的容器,已知 B 集群的 Pod 如果重启后,IP 会变化,所以在 B 集群创建 StatefulSet,并且创建 Headless Service,A 容器通过访问 B 集群这些服务的 ServiceName 来通信,因此 A 集群容器需要在访问 B 集群 ServiceName 的时候能够解析出 IP,所以这里通过给 B 集群的 kube-dns 创建负载均衡或者内网 IP,之后将内网 IP 写入 /etc/resolv.conf 文件中,在 A 集群创建 ConfigMap,最后将其挂载给业务容器。

假设这个 ConfigMap 如下。

apiVersion: v1
data:
  resolv.conf: |
    nameserver x.xx.xxx.xxx
kind: ConfigMap
metadata:
  name: huanandns
  namespace: test

Pod 的定义如下,主要注意 volumesvolumesmountsubpath 是到文件的。

apiVersion: v1
kind: Pod
metadata:
  name: testcm-755976b754-pxtpt
  namespace: test
  ownerReferences:
  - apiVersion: extensions/v1beta1
    blockOwnerDeletion: true
    controller: true
    kind: ReplicaSet
    name: testcm-755976b754
spec:
  containers:
  - args:
    - "36000"
    command:
    - sleep
    image: nginx:latest
    imagePullPolicy: Always
    name: new-container-1
    resources:
      limits:
        cpu: "1"
        memory: 100Mi
      requests:
        cpu: "1"
        memory: 100Mi
    volumeMounts:
    - mountPath: /etc/resolv.conf
      name: cm
      subPath: resolv.conf
  volumes:
  - configMap:
      name: huanandns
    name: cm

Reference

  1. https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-pod-configmap/