我尝试将我的本地集群迁移到GKE。为了促进这一转变,我需要能够解析传统服务的名称。
假设网络/VPN问题已得到解决。
目前是否有一种方法可以在GKE上实现这一点?
事实上,我正在尝试向每个/etc/resolv.conf添加NS。
我尝试将我的本地集群迁移到GKE。为了促进这一转变,我需要能够解析传统服务的名称。
假设网络/VPN问题已得到解决。
目前是否有一种方法可以在GKE上实现这一点?
事实上,我正在尝试向每个/etc/resolv.conf添加NS。
我认为正确的答案是使用集群内的configmaps来向kubelet或DNS(或两者)提供信息。如果您认为这些可能是可行的答案(尽管时间框架问题),如果您打开一个GitHub问题进行讨论,那就太好了。在那里它会得到更多的关注。
实际上不行。
如果您修改了节点的resolv.conf文件,Pod将继承更改。
然而,glibc禁止使用超过3个名称服务器或超过6个搜索记录。
GCE VMs使用2个名称服务器和3个搜索来访问节点元数据和项目网络。而GKE使用1个名称服务器和3个搜索。这意味着您没有可用的名称服务器和搜索。
请参阅此问题:https://github.com/kubernetes/kubernetes/issues/9079 和此问题:https://github.com/kubernetes/kubernetes/issues/9132
setup a dnsmasq service.
The pods can look something like this, make sure this is has at least 2 pods as it needs to be HA.
apiVersion: v1
kind: Pod
metadata:
name: dnsmasq
spec:
containers:
- name: dnsmasq
image: "andyshinn/dnsmasq:2.76"
ports:
- containerPort: 53
hostPort: 53
protocol: UDP
- containerPort: 53
hostPort: 53
protocol: TCP
args: [
"-S", "/consul/10.3.20.86",
"-S", "/consul/10.3.20.88",
"-S", "/consul/10.3.20.90",
"-S", "/your-vpn-domain.dom/10.3.128.22",
"-S", "/your-vpn-domain.dom/10.3.128.23"
]
securityContext:
capabilities:
add:
- NET_ADMIN
Add a resolv-conf config map.
#!/bin/bash
DNS_IP=$(kubectl get svc --template '{{.spec.clusterIP}}' dnsmasq)
DNS_POD=$(kubectl get pod -n kube-system | grep -v kube-dns-autoscaler | grep ^kube-dns | head -1 | awk '{ print $1; }')
DOMAIN=$(kubectl describe -n kube-system pod/${DNS_POD} | grep -- --domain= | sed -Ee 's/.*--domain=(.*)\..*/\1/')
SEARCH=$(kubectl exec -n kube-system ${DNS_POD} -c kubedns -- cat /etc/resolv.conf | grep ^search | cut -d' ' -f2-)
VPN_SEARCH="your-vpn-domain.dom"
kubectl create -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: resolv-conf
data:
resolv.conf: |
# This file is created by resolv-conf config map and points to the dnsmasq service.
search default.svc.${DOMAIN} svc.${DOMAIN} ${DOMAIN} ${SEARCH} ${VPN_SEARCH}
nameserver ${DNS_IP}
ndots:5
EOF
Mount the cfgmap in your services/pods. add this to your pods
volumeMounts:
- mountPath: /etc/resolv.conf
name: resolv-conf
subPath: resolv.conf
readOnly: true
volumes:
- name: resolv-conf
configMap:
name: resolv-conf