kubernetes(26):k8s的dns服務-coredns


k8s的dns服務-coredns

1  k8s dns簡介

在kubernetes中每一個service都會被分配一個虛擬IP,每一個Service在正常情況下都會長時間不會改變,這個相對於pod的不定IP,對於集群中APP的使用相對是穩定的。但是Service的信息注入到pod目前使用的是環境變量的方式,並且十分依賴於pod(rc)和service的創建順序,這使得這個集群看起來又不那么完美,於是kubernetes以插件的方式引入了DNS系統,利用DNS對Service進行一個映射,這樣我們在APP中直接使用域名進行引用,避免了之前的變量泛濫問題,也避免了創建順序的尷尬局面。

 

Dns解析的實際是svc的虛擬負載IP,調用的域名也就是設置的service名稱

2  K8s dns安裝配置

Yum安裝的k8s需要手動配置dns服務

配置方法https://www.cnblogs.com/dribs/p/9120573.html
kubeadm安裝的k8s,在部署的時候默認安裝了,部署的是coredns

[root@k8s-master k8s]# kubectl get pods -n kube-system |grep dns
coredns-5c98db65d4-7rqxc                1/1     Running   0          25h
coredns-5c98db65d4-8w45r                1/1     Running   0 25h
[root@k8s-master k8s]#

[root@k8s-master k8s]# kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-84cddf955f-4r2mx   1/1     Running   0          10m
nginx-deployment-84cddf955f-q6xc5   1/1     Running   0          10m
[root@k8s-master k8s]# kubectl  exec -it nginx-deployment-84cddf955f-4r2mx /bin/bash
root@nginx-deployment-84cddf955f-4r2mx:/# cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
root@nginx-deployment-84cddf955f-4r2mx:/#

 

 

 

 

3  一個簡單樣例tomcat+mysql解析

我們之前yum安裝的k8s,部署了web應用tomcat+mysql。pod的DNS不能解析,只能寫死MySQL的IP地址

https://www.cnblogs.com/wangxu01/articles/11411113.html

 

現在有了kubeamd部署的k8s環境,我們重新來測試一下

 

3.1  下載官方的測試鏡像和MySQL

其實無所謂,服務也會自動下載的,我這里沒有配置本地倉庫

3.2  部署mysql 服務

未持久化,這里只驗證dns

3.2.1   創建一個mysql-deployment文件

apiVersion: extensions/v1beta1
kind: Deployment            #副本控制器Deployment
metadata:
  name: mysql                          #Deployment的名稱,全局唯一
spec:
  replicas: 1                          #Pod副本的期待數量
  template:                            #根據此模版創建Pod的副本(實例)
    metadata:
       labels:
         app: mysql                    #Pod副本擁有的標簽,對應Deployment的selector
    spec:
       containers:                     #Pod內,定義容器
       - name: mysql                   #容器名稱
         image: mysql:5.7              #Docker image
         ports:
         - containerPort: 3306         #容器應用監聽的端口
         env:                          #注入容器內的環境變量
         - name: MYSQL_ROOT_PASSWORD   #這里設置root初始密碼
           value: "123456"

 

 

3.2.2   創建mysql-deployment

kubectl create -f mysql-deploy.yamlcat 

 

3.2.3   驗證mysql-deployment

[root@k8s-master tomcatapp+mysql]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
mysql              1/1     1            1           3m9s
nginx-deployment   2/2     2            2           20h
[root@k8s-master tomcatapp+mysql]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
mysql-94f6bbcfd-4f4fr               1/1     Running   0          3m19s
nginx-deployment-84cddf955f-4r2mx   1/1     Running   0          30m
nginx-deployment-84cddf955f-q6xc5   1/1     Running   0          30m
[root@k8s-master tomcatapp+mysql]# kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP            NODE         NOMINATED NODE   READINESS GATES
mysql-94f6bbcfd-4f4fr               1/1     Running   0          4m33s   10.254.2.37   k8s-node-2   <none>           <none>
nginx-deployment-84cddf955f-4r2mx   1/1     Running   0          31m     10.254.1.39   k8s-node-1   <none>           <none>
nginx-deployment-84cddf955f-q6xc5   1/1     Running   0          31m     10.254.2.34   k8s-node-2   <none>           <none>
[root@k8s-master tomcatapp+mysql]#

 


 

3.2.4   創建MySQL service文件

#DNS根據標簽搜索
apiVersion: v1
kind: Service
metadata:
 name: tomcat-mysql #DNS根據標簽搜索nslook和dig也根據這個解析
spec:
  ports:
  - port: 3306
  selector:
app: timcat-mysql  

 

 

3.2.5 創建MySQL service

kubectl apply -f mysql-svc.yaml

 

3.2.6 連接MySQL測試

[root@k8s-master tomcatapp+mysql]# mysql -uroot -p123456 -h10.254.2.37
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.27 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

MySQL [(none)]>

 

 

3.3  部署web服務

 

3.3.1   創建一個tomcat-app-deployment文件

iVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tomcat-app
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: tomcat-app
    spec:
      containers:
      - name: tomcat-app
        image: kubeguide/tomcat-app:v1
        ports:
        - containerPort: 8080
        env:
        - name: MYSQL_SERVICE_HOST
 value: 'tomcat-mysql'    #MySQL  service標簽
        - name: MYSQL_SERVICE_PORT
          value: '3306'

 

 

3.3.2   創建tomcatAPP服務

kubectl create -f tomcat-app-deployment.yaml 

 

 

3.3.3   驗證tomcat-app-deployment

[root@k8s-master tomcatapp+mysql]# kubectl get deployment | grep tomcattomcat-app         3/3     3            3           88s
[root@k8s-master tomcatapp+mysql]# kubectl get pod -o wide| grep tomcattomcat-app-8489b8fdbf-9hsdn         1/1     Running   0          92s   10.254.2.38   k8s-node-2   <none>           <none>
tomcat-app-8489b8fdbf-cl8kw         1/1     Running   0          92s   10.254.1.43   k8s-node-1   <none>           <none>tomcat-app-8489b8fdbf-twj9h         1/1     Running   0          92s   10.254.1.42   k8s-node-1   <none>           <none>
[root@k8s-master tomcatapp+mysql]#

 

 

3.3.4    測試tomcat-app-deployment服務

[root@k8s-master tomcatapp+mysql]# curl -I 10.254.1.43:8080
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 30 Aug 2019 03:13:13 GMT

[root@k8s-master tomcatapp+mysql]# curl -I 10.254.1.43:8080/demo/
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=6E07DBC15C31CE815EF57A5031F0F42B; Path=/demo/; HttpOnly
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Date: Fri, 30 Aug 2019 03:13:27 GMT

[root@k8s-master tomcatapp+mysql]#

 

 

3.3.5    創建tomcat-app service文件

apiVersion: v1
kind: Service
metadata:
  name: tomcat-app
spec:
  type: NodePort
  ports:
    - port: 8080
      name: myweb-svc
      nodePort: 30020
  selector:
    app: tomcat-app

 

 

3.3.6    創建tomcat-app service

kubectl create -f tomcatapp-svc.yaml

 

3.3.7    測試tomcat

1.1.1    測試tomcat
[root@k8s-master tomcatapp+mysql]# curl -I  10.6.76.24:30020/demo/
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=E7DEB006D12FA0896D8E92E0EA62D337; Path=/demo/; HttpOnly
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Date: Fri, 30 Aug 2019 03:17:00 GMT

[root@k8s-master tomcatapp+mysql]# curl -I  10.6.76.23:30020/demo/
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=96B1298BB30F5C2BC57CFFF1228122D9; Path=/demo/; HttpOnly
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Date: Fri, 30 Aug 2019 03:17:05 GMT

[root@k8s-master tomcatapp+mysql]#

 

 

3.4  dig和nslookup測試DNS

 

# cat dig.yaml
apiVersion: v1
kind: Pod
metadata:
  name: dig
  namespace: default
spec:
  containers:
  - name: dig
    image:  docker.io/azukiapp/dig
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
  restartPolicy: Always

 

[root@k8s-master tomcatapp+mysql]# kubectl apply -f dig.yaml
pod/dig unchanged
[root@k8s-master tomcatapp+mysql]# kubectl get svc
NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes        ClusterIP   10.96.0.1       <none>        443/TCP          27h
nginx             NodePort    10.105.15.44    <none>        80:30023/TCP     21h
t-mysql           ClusterIP   10.108.97.7     <none>        3306/TCP         9m50s
test-tomcat-app   NodePort    10.101.38.207   <none>        8080:30020/TCP   7m6s
[root@k8s-master tomcatapp+mysql]#
[root@k8s-master tomcatapp+mysql]# kubectl exec -it dig /bin/bash
bash-4.3# nslookup test-tomcat-app
Server:         10.96.0.10
Address:        10.96.0.10#53

Name:   test-tomcat-app.default.svc.cluster.local
Address: 10.101.38.207

bash-4.3# nslookup nginx
Server:         10.96.0.10
Address:        10.96.0.10#53

Name:   nginx.default.svc.cluster.local
Address: 10.105.15.44

bash-4.3# dig nginx

; <<>> DiG 9.10.3-P3 <<>> nginx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 42115
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;nginx.                         IN      A

;; AUTHORITY SECTION:
.                       30      IN      SOA     a.root-servers.net. nstld.verisign-grs.com. 2019082901 1800 900 604800 86400

;; Query time: 84 msec
;; SERVER: 10.96.0.10#53(10.96.0.10)
;; WHEN: Fri Aug 30 04:23:05 UTC 2019
;; MSG SIZE  rcvd: 109

bash-4.3#

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM