溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

K8S在開(kāi)發(fā)測(cè)試環(huán)境落地問(wèn)題處理之內(nèi)網(wǎng)DNS解析

發(fā)布時(shí)間:2020-07-28 10:08:32 來(lái)源:網(wǎng)絡(luò) 閱讀:2768 作者:rong341233 欄目:云計(jì)算

相信很多朋友都已經(jīng)在測(cè)試或者生產(chǎn)環(huán)境中使用K8S來(lái)解決自己的業(yè)務(wù)問(wèn)題,以下是我們?cè)跍y(cè)試環(huán)境落地的一些實(shí)踐。我們把所有的Service、POD直接裸奔于開(kāi)發(fā)以及測(cè)試人員(沒(méi)有使用Ingress、nodeport、LB,直接使用靜態(tài)路由+NAT),這樣我們的測(cè)試以及開(kāi)發(fā)人員可直接訪問(wèn)SVC和POD,這個(gè)后期我們單獨(dú)拿出來(lái)細(xì)講。由于我們是移動(dòng)端原生開(kāi)發(fā)居多,因此大部分都需要借助WIFI+DNS服務(wù)器來(lái)完成我們APP的測(cè)試。但是內(nèi)網(wǎng)站點(diǎn)多,服務(wù)多,需要經(jīng)常維護(hù)DNS服務(wù)器,可不可以根據(jù)我們的Service自動(dòng)去維護(hù)我們的DNS服務(wù)器呢。

思路:
1.獲取K8S容器云中所有namespace下的所有Service,然后制定規(guī)則如所有的web服務(wù)以完整的域名作為服務(wù)名,比如我們的api.abc.com那么服務(wù)名就是api-abc-com,然后把kube-system過(guò)濾掉
2.根據(jù)上述獲取到的namespace、域名、ClusterIP寫(xiě)入到對(duì)應(yīng)文件夾下的DNS配置文件,如果存在則刪除再增加,如果不存在則自動(dòng)添加
3.將各個(gè)命名空間的DNS配置文件進(jìn)行加載

#!/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"   #此處為外網(wǎng)的DNS服務(wù)器
---

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
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI