K8S在開發測試環境落地問題處理之內網DNS解析
阿新 • • 發佈:2018-10-29
domain 添加 beta clu 規則 mkdir containe env 測試環境 相信很多朋友都已經在測試或者生產環境中使用K8S來解決自己的業務問題,以下是我們在測試環境落地的一些實踐。我們把所有的Service、POD直接裸奔於開發以及測試人員(沒有使用Ingress、nodeport、LB,直接使用靜態路由+NAT),這樣我們的測試以及開發人員可直接訪問SVC和POD,這個後期我們單獨拿出來細講。由於我們是移動端原生開發居多,因此大部分都需要借助WIFI+DNS服務器來完成我們APP的測試。但是內網站點多,服務多,需要經常維護DNS服務器,可不可以根據我們的Service自動去維護我們的DNS服務器呢。
2.根據上述獲取到的namespace、域名、ClusterIP寫入到對應文件夾下的DNS配置文件,如果存在則刪除再增加,如果不存在則自動添加
3.將各個命名空間的DNS配置文件進行加載
思路:
1.獲取K8S容器雲中所有namespace下的所有Service,然後制定規則如所有的web服務以完整的域名作為服務名,比如我們的api.abc.com那麽服務名就是api-abc-com,然後把kube-system過濾掉
3.將各個命名空間的DNS配置文件進行加載
#!/bin/bash svc=$(kubectl get svc --all-namespaces|awk ‘/-/ && NR!=1 && !/kube-system/ {print $1,$2,$4}‘|sed ‘s#-#.#g‘) echo "$svc"|while read line do namespace=`echo $line|awk ‘{print $1}‘` [ -d $namespace ] || mkdir -p ${namespace} [ -f ${namespace}/dns ] || touch ${namespace}/dns domain=`echo $line|awk ‘{print $2}‘` dns_record=`echo $line|awk ‘{print $2"="$3}‘` [ `grep ${dns_record} ${namespace}/dns|wc -l` ] && sed -i "/${domain}/d" ${namespace}/dns && echo ${dns_record}>>${namespace}/dns 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
K8S在開發測試環境落地問題處理之內網DNS解析