您好,登錄后才能下訂單哦!
相信很多朋友都已經在測試或者生產環境中使用K8S來解決自己的業務問題,以下是我們在測試環境落地的一些實踐。我們把所有的Service、POD直接裸奔于開發以及測試人員(沒有使用Ingress、nodeport、LB,直接使用靜態路由+NAT),這樣我們的測試以及開發人員可直接訪問SVC和POD,這個后期我們單獨拿出來細講。由于我們是移動端原生開發居多,因此大部分都需要借助WIFI+DNS服務器來完成我們APP的測試。但是內網站點多,服務多,需要經常維護DNS服務器,可不可以根據我們的Service自動去維護我們的DNS服務器呢。
思路:
1.獲取K8S容器云中所有namespace下的所有Service,然后制定規則如所有的web服務以完整的域名作為服務名,比如我們的api.abc.com那么服務名就是api-abc-com,然后把kube-system過濾掉
2.根據上述獲取到的namespace、域名、ClusterIP寫入到對應文件夾下的DNS配置文件,如果存在則刪除再增加,如果不存在則自動添加
3.將各個命名空間的DNS配置文件進行加載
#!/bin/bash
ns=$(kubectl get ns|awk 'NR!=1 && !/kube/ && !/istio/ && !/cattle-system/ && !/default/ && !/efk/ {print $1}')
for namespace in $ns
do
[ -d $namespace ] || mkdir -p ${namespace}
[ -f ${namespace}/dns ] || touch ${namespace}/dns
svc=$(kubectl get svc -n$namespace|awk '/-/ && NR!=1 {print $1,$3}'|sed 's#-#.#g')
echo "$svc"|while read line
do
domain=`echo $line|awk '{print $1}'`
dns_record=`echo $line|awk '{print $1"="$2}'`
[ `grep ${dns_record} ${namespace}/dns|wc -l` ] && sed -i "/${domain}/d" ${namespace}/dns && echo ${dns_record}>>${namespace}/dns
done
names=`cat ${namespace}/dns | grep -v '^#|^//' | tr '\n' ','|sed 's/,$//g'`
sed "s#{namespace}#${namespace}#g" ~/yaml/dns/deploy.yaml | sed "s#{names}#${names}#g"|kubectl apply -f -
done
查看DNS的deploy-svc.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: dns
namespace: {namespace}
spec:
selector:
matchLabels:
name: dns
replicas: 1
template:
metadata:
labels:
name: dns
spec:
containers:
- name: bind
image: cytopia/bind
ports:
- containerPort: 53
protocol: TCP
name: dnstcp
- containerPort: 53
protocol: UDP
name: dnsudp
env:
- name: EXTRA_HOSTS
value: "{names}"
- name: DNS_FORWARDER
value: "114.114.114.144,8.8.4.4" #此處為外網的DNS服務器
---
apiVersion: v1
kind: Service
metadata:
name: dns
namespace: {namespace}
labels:
name: dns
spec:
ports:
- protocol: TCP
port: 53
targetPort: 53
name: dnstcp
- protocol: UDP
port: 53
targetPort: 53
name: dnsudp
selector:
name: dns
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。