1. 程式人生 > >kubernetes---dns服務搭建指南

kubernetes---dns服務搭建指南

參考自《kubernetes權威指南》

1.基本概念

作為服務發現機制的基本功能,在叢集內需要能夠通過服務名對服務進行訪問,這就需要一個叢集範圍的DNS服務來完成服務名到clusterIP的解析

kubernetes提供的虛擬DNS服務名為skydns,由4個元件組成

  1. etcd:DNS儲存
  2. kube2sky:將kubernetes master中的service註冊到etcd
  3. skyDNS:提供dns域名解析服務
  4. healthz:提供對skydns服務的健康檢查功能

2.實驗與操作

複製以下程式碼時,如果TAB長度不是八個空格,可能報檔案格式錯誤
1.建立skydns-rc.yaml的rc檔案
vim skydns-rc.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: kube-dns-v11
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    version: v11
    kubernetes.io/cluster-service: "true"
spec:
  replicas: 1
  selector:
    k8s-app: kube-dns
    version: v11
  template:
    metadata:
      labels:
        k8s-app: kube-dns
        version: v11
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
      - name:
etcd
image: gcr.io/google_containers/etcd-amd64:2.2.1 resources: limits: cpu: 100m memory: 50Mi requests: cpu: 100m memory: 50Mi command: - /usr/local/bin/etcd - -data-dir - /tmp/data - -listen-client-urls
- http://127.0.0.1:2379,http://127.0.0.1:4001 - -advertise-client-urls - http://127.0.0.1:2379,http://127.0.0.1:4001 - -initial-cluster-token - skydns-etcd volumeMounts: - name: etcd-storage mountPath: /tmp/data - name: kube2sky image: gcr.io/google_containers/kube2sky-amd64:1.15 resources: limits: cpu: 100m memory: 50Mi requests: cpu: 100m memory: 50Mi livenessProbe: httpGet: path: /healthz port: 8080 scheme: HTTP initialDelaySeconds: 60 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 5 readinessProbe: httpGet: path: /readiness port: 8081 scheme: HTTP initialDelaySeconds: 30 timeoutSeconds: 5 args: - --kube-master-url=http://192.168.56.102:8080 - --domain=cluster.local - name: skydns image: gcr.io/google_containers/skydns:2015-10-13-8c72f8c resources: limits: cpu: 100m memory: 50Mi requests: cpu: 100m memory: 50Mi args: - -machines=http://127.0.0.1:4001 - -addr=0.0.0.0:53 - -ns-rotate=false - -domain=cluster.local ports: - containerPort: 53 name: dns protocol: UDP - containerPort: 53 name: dns-tcp protocol: TCP - name: healthz image: gcr.io/google_containers/exechealthz:1.0 resources: limits: cpu: 10m memory: 20Mi requests: cpu: 10m memory: 20Mi args: - -cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1 > /de/null - -port=8080 ports: - containerPort: 8080 protocol: TCP volumes: - name: etcd-storage emptyDir: {} dnsPolicy: Default

2.建立skydns的svc檔案
vim skydns-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: "KubeDNS"
spec:
  selector:
    k8s-app: kube-dns
  clusterIP: 169.169.0.100
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP

如果無法訪問google , 需參考文章最後疑難解析修改映象名

3.修改每臺node上kubelet啟動引數,新增
–cluster_dns=169.169.0.100
–cluster_domain=cluser.local

4.建立資源
kubectl create -f skydns-rc.yaml
kubectl create -f skydns-svc.yaml

5.檢查資源是否正常
kubectl get rc –namespace=kube-system
kubectl get pods –namespace=kube-system
kubectl get svc –namespace=kube-system

6.為redis-master建立一個service
vim redis-master-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: redis-master
  labels:
    name: redis-master
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    name: redis-master

kubectl get services 檢查剛剛建立的redis-master服務是否正常

7.使用一個帶有nslookup工具的pod來驗證dns服務是否正常工作
vim busybox.yaml

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - name: busybox
    image: busybox
    command:
    - sleep
    - "3600"

kubectl create -f busybox.yaml

kubectl exec busybox – nslookup redis-master

實驗結果:無法解析redis-master
[[email protected] kubernetes]# kubectl exec kube-dns-v11-bh30c -c etcd –namespace=kube-system etcdctl ls /skydns/local/cluster
/skydns/local/cluster/svc
/skydns/local/cluster/pod
結果發現redis-master存在上述svc/default下,因此查詢需要修改為:

kubectl exec busybox -- nslookup redis-master.defualt.svc
[root@kube-master kubernetes]# kubectl exec kube-dns-v11-bh30c -c etcd --namespace=kube-system etcdctl -- ls --recursive  /skydns/local/cluster/
/skydns/local/cluster/svc
/skydns/local/cluster/svc/default
/skydns/local/cluster/svc/default/kubernetes
/skydns/local/cluster/svc/default/kubernetes/430884aa
/skydns/local/cluster/svc/default/redis-master
/skydns/local/cluster/svc/default/redis-master/3896faab
/skydns/local/cluster/svc/kube-system
/skydns/local/cluster/svc/kube-system/kube-dns
/skydns/local/cluster/svc/kube-system/kube-dns/1c613ef2
/skydns/local/cluster/pod
/skydns/local/cluster/pod/kube-system
/skydns/local/cluster/pod/kube-system/172-17-0-2
/skydns/local/cluster/pod/kube-system/172-17-0-2/c6db276b
/skydns/local/cluster/pod/default
/skydns/local/cluster/pod/default/172-17-0-3
/skydns/local/cluster/pod/default/172-17-0-3/edc9142

3.疑難解決

1.如果無法訪問google , 無法獲取pause-amd則做如下處理

docker pull kubeguide/pause-amd64:3.0
在每臺node上為kubelet的啟動引數新增: 
--pod-infra-container-image=kubeguide/pause-amd64:3.0
修改skydns-rc.yaml,修改image映象為如下
outrider/etcd-amd64
outrider/kube2sky
outrider/skydns
outrider/exechealthz

2.建立rc成功,卻沒有pod,kubectl describe rc mysql顯示No API token found for service account “default”
vim /etc/kubernetes/apiserver
將“–admission-control=NamespaceLifecycle,NamespaceExists, LimitRanger, SecurityContextDeny, ServiceAccount, ResourceQuota”
中的SecurityContextDeny, ServiceAccount刪掉並重啟kube-apiserver

3.no nodes,排程失敗,沒有可用的節點
node和master節點通訊故障,可以通過journalctl -u kubelet | tail -300分析日誌排錯

4.certificate is valid for kubernetes.default.svc, kubernetes.default, kubernetes, localhost, not kube-master 或者Get https://192.168.56.102:6443/api/v1/services?resourceVersion=0: x509: certificate is valid for 192.168.124.17, 169.169.0.1, not 192.168.56.102 , certificate signed by unknown authority。
建議不使用證書實驗,或者重新做證書

相關推薦

kubernetes---dns服務搭建指南

參考自《kubernetes權威指南》 1.基本概念 作為服務發現機制的基本功能,在叢集內需要能夠通過服務名對服務進行訪問,這就需要一個叢集範圍的DNS服務來完成服務名到clusterIP的解析 kubernetes提供的虛擬DNS服務名為skydns

Kubernetes DNS 服務安裝配置

docker kubernets skydns kube2sky Kubernetes的DNS服務是基於SkyDNS實現的,同時又需要和API Server緊密溝通,它的基本工作方式是通過API Server監視服務創建,一旦有新的服務創建就通知SkyDNS創建一條域名解析記錄。溝通AP

加密演算法與DNS服務搭建

1、 簡述常見加密演算法及常見加密演算法原理,最好使用圖例解說 常見加密演算法: 對稱加密:加密和解密使用同一個金鑰; DES:Data Encryption Standard; 3DES:Triple DES;AES:Advanced Encryption Standard; (128bit

加密算法與DNS服務搭建

net open cap 效應 end view 自己 some provide 1、 簡述常見加密算法及常見加密算法原理,最好使用圖例解說 常見加密算法: 對稱加密:加密和解密使用同一個密鑰; DES:Data Encryption Standard; 3DE

DNS服務搭建

主配置檔案:/etc/named.conf 區檔案模板檔案:/var/named/named.loaclhost 注意:如果安裝了chroot,配置檔案的路徑就會變為: 主:/var/named/chr

ltp server服務搭建指南

前言 最近想了解下nlp相關的技術,就找了ltp開始上手。 ltp是哈工大開發的中文自然語言處理套件,現在也對外提供雲服務,不過對於介面呼叫頻率和次數做了一定的限制 : http://www.ltp-cloud.com/ ltp server允許使用者在本地啟動一個nlp

seafile私有云檔案管理系統系統服務搭建指南

Seafile是一個開源、專業、可靠的雲端儲存平臺;解決檔案集中儲存、共享和跨平臺訪問等問題,由北京海文互知網路有限公司開發,釋出於2012年10月;除了一般網盤所提供的雲端儲存以及共享功能外,Seafile還提供訊息通訊、群組討論等輔助功能,幫助更好的圍繞檔案展開協同工作

附011.Kubernetes-DNS搭建

一 Kubernetes DNS介紹 1.1 Kubernetes DNS發展 作為服務發現機制的基本功能,在叢集內需要能夠通過服務名對服務進行訪問,因此需要一個叢集範圍內的DNS服務來完成從服務名到ClusterIP的解析。 DNS服務在Kubernetes的發展過程中經歷了3個階段,SkyDNS ----

在 CentOS7.0 上搭建 Chroot 的 Bind DNS 服務

n) 地址 授權 dns 部分 soa 自啟 named 就會 BIND(Berkeley internet Name Daemon)也叫做NAMED,是現今互聯網上使用最為廣泛的DNS 服務器程序。這篇文章將要講述如何在 chroot 監牢中運行 BIND,這樣它就無法訪

主從DNS服務器的搭建

tar 搭建 sta not www 切換 tle add 解析 一.DNS主從的理解   主從服務器,在一開始的理解中,以為是主的dns服務器掛掉後,(dns服務自動轉向輔助dns服務器),客戶端還能繼續解析。事實貌似不是這樣的。當我把主dns停掉的時候,客戶端只設一個d

Linux學習之服務搭建——DNS服務

環境 back 文件 -a etc http 區域 輸入 正向 DNS服務器其實是域名解析系統,需要的前提條件只是,兩臺虛擬機可以ping同即可,因此可以在基礎網絡配置下單獨聯系,也可以跟著DHCP服務器一起練習,只是我們以前ping的是IP地址,現在變成ping域名(例:

詳解linux搭建DNS服務器器

詳解 linux 搭建 整個hteret大家庭中連接了數以億計的服務器個人主機,其中大部分的網站,部件等服務器都使用了域名形式的地址,如www.google.com.mail 163.com 等。很顯然這種地址形式要比使月01231317202103 7A 的戶地址形式更加直觀而且更容易被用戶記住

dnsmasq搭建簡易dns服務

dnsmasq系統:centos6.8_x64本機IP:172.17.41.243為了簡便直接使用yum安裝dnsmasqyum install -y dnsmasq安裝後編輯配置文件/etc/dnsmasql.cofcp /etc/dnsmasq.conf /etc/dnsmasq.conf.ori >

DNS(BIND)服務搭建

查詢 1-1 left conf con 設置 install ima 修改 一、DNS 1.負責將域名解析為IP(正向解析);將IP解析為域名(反向解析) 2.DNS查詢過程 如客戶端訪問www.baidu.com 1)客戶端查看本地是否存有DNS緩存 2)客戶端查看本地

搭建一個簡易的DNS服務

dns 簡易 服務器 今天給大家介紹如何搭建一個DNS服務,以下圖為例,當一個小區客戶端去訪問www.jiabing.com時,DNS需要如何去搭建。 搭建前需要先把每臺服務器的防火墻和SELINUX關閉。關閉防火墻:iptables -F查看SELINUX是否關閉:gete

使用Bind搭建DNS服務

fresh one master 主程 維護 n-1 找到 table systemctl DNS域名解析服務(Domain Name System)是用於解析域名與IP地址對應關系的服務,功能上可以實現正向解析與反向解析:   正向解析:根據主機名(域名)查找對應的IP

CentOS 7.3 搭建DNS服務

centos dns 域名解析 一、DNS服務簡介1. DNS服務簡介DNS(Domain Name System)域名系統。目前提供網絡服務的應用使用唯一的32位的IP地址來標識,但是由於數字比較復雜、難以記憶,因此產生了域名系統(DNS),通過域名系統,可以使用易於理解和形象的字符串名稱來標識

CentOS7搭建BIND9 DNS服務器過程

bind dns linux ns 域名解析 一、系統環境CentOS7 BIND 9.9二、安裝bind#yum -y install bind三、配置安裝1、修改任何人都可以通過該DNS進行查詢#vim /etc/named.conf ## listen-on port 53 { 1

Linux—CentOS7.4-DNS一(搭建DNS服務器)

查看 運行 roo -- direct rfc ins resolv .com 相關概念:正向解析:將域名解析成IP地址反向解析:將IP地址解析成域名環境:linux服務器一臺,IP地址:192.168.80.10 第一步:準備工作[root@localhost ~]# y

Linux—CentOS7.4-DNS二(搭建分離解析的DNS服務器)

host ems med 顯示 ces win7 域名 firewall dns服務 環境:Linux服務器一臺(雙網卡)內網IP:192.168.80.180 外網IP:192.168.90.180 Linux客戶端一臺,IP地址:192.16