【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/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章