业务容器需要在 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 的定义如下,主要注意 volumes
和 volumesmount
,subpath
是到文件的。
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