1. 程式人生 > >k8s1.9.0安裝--完整集群部署

k8s1.9.0安裝--完整集群部署

inux lct dns conf 重新 emc 容器 發現 ech

三、完整集群部署 - kubernetes-with-ca

1. 理解認證授權

1.1 為什麽要認證

想理解認證,我們得從認證解決什麽問題、防止什麽問題的發生入手。
防止什麽問題呢?是防止有人入侵你的集群,root你的機器後讓我們集群依然安全嗎?不是吧,root都到手了,那就為所欲為,防不勝防了。
其實網絡安全本身就是為了解決在某些假設成立的條件下如何防範的問題。比如一個非常重要的假設就是兩個節點或者ip之間的通訊網絡是不可信任的,可能會被第三方竊取,也可能會被第三方篡改。就像我們上學時候給心儀的女孩傳紙條,傳送的過程可能會被別的同學偷看,甚至內容可能會從我喜歡你修改成我不喜歡你了。當然這種假設不是隨便想出來的,而是從網絡技術現狀和實際發生的問題中發現、總結出來的。kubernetes的認證也是從這個問題出發來實現的。

1.2 概念梳理

為了解決上面說的問題,kubernetes並不需要自己想辦法,畢竟是網絡安全層面的問題,是每個服務都會遇到的問題,業內也有成熟的方案來解決。這裏我們一起了解一下業內方案和相關的概念。

  • 對稱加密/非對稱加密 這兩個概念屬於密碼學的東西,對於沒接觸過的同學不太容易理解。可以參考知乎大神的生動講解: 《如何用通俗易懂的話來解釋非對稱加密》
  • SSL/TLS 了解了對稱加密和非對稱加密後,我們就可以了解一下SSL/TLS了。同樣,已經有大神總結了非常好的入門文章: 《SSL/TLS協議運行機制的概述》

1.3 什麽是授權

授權的概念就簡單多了,就是什麽人具有什麽樣的權限,一般通過角色作為紐帶把他們組合在一起。也就是一個角色一邊擁有多種權限,一邊擁有多個人。這樣就把人和權限建立了一個關系。

2. kubernetes的認證授權

Kubernetes集群的所有操作基本上都是通過kube-apiserver這個組件進行的,它提供HTTP RESTful形式的API供集群內外客戶端調用。需要註意的是:認證授權過程只存在HTTPS形式的API中。也就是說,如果客戶端使用HTTP連接到kube-apiserver,那麽是不會進行認證授權的。所以說,可以這麽設置,在集群內部組件間通信使用HTTP,集群外部就使用HTTPS,這樣既增加了安全性,也不至於太復雜。
對APIServer的訪問要經過的三個步驟,前面兩個是認證和授權,第三個是 Admission Control,它也能在一定程度上提高安全性,不過更多是資源管理方面的作用。

2.1 kubernetes的認證

kubernetes提供了多種認證方式,比如客戶端證書、靜態token、靜態密碼文件、ServiceAccountTokens等等。你可以同時使用一種或多種認證方式。只要通過任何一個都被認作是認證通過。下面我們就認識幾個常見的認證方式。

  • 客戶端證書認證 客戶端證書認證叫作TLS雙向認證,也就是服務器客戶端互相驗證證書的正確性,在都正確的情況下協調通信加密方案。 為了使用這個方案,api-server需要用--client-ca-file選項來開啟。
  • 引導Token 當我們有非常多的node節點時,手動為每個node節點配置TLS認證比較麻煩,這時就可以用到引導token的認證方式,前提是需要在api-server開啟 experimental-bootstrap-token-auth 特性,客戶端的token信息與預先定義的token匹配認證通過後,自動為node頒發證書。當然引導token是一種機制,可以用到各種場景中。
  • Service Account Tokens 認證 有些情況下,我們希望在pod內部訪問api-server,獲取集群的信息,甚至對集群進行改動。針對這種情況,kubernetes提供了一種特殊的認證方式:Service Account。 Service Account 和 pod、service、deployment 一樣是 kubernetes 集群中的一種資源,用戶也可以創建自己的 Service Account。 ServiceAccount 主要包含了三個內容:namespace、Token 和 CA。namespace 指定了 pod 所在的 namespace,CA 用於驗證 apiserver 的證書,token 用作身份驗證。它們都通過 mount 的方式保存在 pod 的文件系統中。

2.2 kubernetes的授權

在Kubernetes1.6版本中新增角色訪問控制機制(Role-Based Access,RBAC)讓集群管理員可以針對特定使用者或服務賬號的角色,進行更精確的資源訪問控制。在RBAC中,權限與角色相關聯,用戶通過成為適當角色的成員而得到這些角色的權限。這就極大地簡化了權限的管理。在一個組織中,角色是為了完成各種工作而創造,用戶則依據它的責任和資格來被指派相應的角色,用戶可以很容易地從一個角色被指派到另一個角色。 目前 Kubernetes 中有一系列的鑒權機制,因為Kubernetes社區的投入和偏好,相對於其它鑒權機制而言,RBAC是更好的選擇。具體RBAC是如何體現在kubernetes系統中的我們會在後面的部署中逐步的深入了解。

2.3 kubernetes的AdmissionControl

AdmissionControl - 準入控制本質上為一段準入代碼,在對kubernetes api的請求過程中,順序為:先經過認證 & 授權,然後執行準入操作,最後對目標對象進行操作。這個準入代碼在api-server中,而且必須被編譯到二進制文件中才能被執行。 在對集群進行請求時,每個準入控制代碼都按照一定順序執行。如果有一個準入控制拒絕了此次請求,那麽整個請求的結果將會立即返回,並提示用戶相應的error信息。 常用組件(控制代碼)如下:

  • AlwaysAdmit:允許所有請求
  • AlwaysDeny:禁止所有請求,多用於測試環境
  • ServiceAccount:它將serviceAccounts實現了自動化,它會輔助serviceAccount做一些事情,比如如果pod沒有serviceAccount屬性,它會自動添加一個default,並確保pod的serviceAccount始終存在
  • LimitRanger:他會觀察所有的請求,確保沒有違反已經定義好的約束條件,這些條件定義在namespace中LimitRange對象中。如果在kubernetes中使用LimitRange對象,則必須使用這個插件。
  • NamespaceExists:它會觀察所有的請求,如果請求嘗試創建一個不存在的namespace,則這個請求被拒絕。

3. 環境準備

3.1 停止原有kubernetes相關服務

開始之前我們要先把基礎版本的集群停掉,包括service,deployments,pods以及運行的所有kubernetes組件

#刪除services

$ kubectl delete services nginx-service


#刪除deployments

$ kubectl delete deploy kubernetes-bootcamp
$ kubectl delete deploy nginx-deployment
$ kubectl delete service kubernetes-bootcamp

#停掉worker節點的服務

$ service kubelet stop && rm -fr /var/lib/kubelet/*

$ service kube-proxy stop && rm -fr /var/lib/kube-proxy/*

$ service kube-calico stop


#停掉master節點的服務

$ service kube-calico stop
$ service kube-scheduler stop
$ service kube-controller-manager stop
$ service kube-apiserver stop
$ service etcd stop && rm -fr /var/lib/etcd/*

3.2 生成配置(所有節點)

跟基礎環境搭建一樣,我們需要生成kubernetes-with-ca的所有相關配置文件

$ cd ~/kubernetes-starter

#按照配置文件的提示編輯好配置

$ vi config.properties

#生成配置

$ ./gen-config.sh with-ca

3.3 安裝cfssl(所有節點)

cfssl是非常好用的CA工具,我們用它來生成證書和秘鑰文件
安裝過程比較簡單,如下:

#下載

$ wget -q --show-progress --https-only --timestamping   https://pkg.cfssl.org/R1.2/cfssl_linux-amd64   https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64

#修改為可執行權限

$ chmod +x cfssl_linux-amd64 cfssljson_linux-amd64

#移動到bin目錄

$ mv cfssl_linux-amd64 /usr/local/bin/cfssl
$ mv cfssljson_linux-amd64 /usr/local/bin/cfssljson

#驗證

$ cfssl version

3.4 生成根證書(主節點)

根證書是證書信任鏈的根,各個組件通訊的前提是有一份大家都信任的證書(根證書),每個人使用的證書都是由這個根證書簽發的。

#所有證書相關的東西都放在這

$ mkdir -p /etc/kubernetes/ca

#準備生成證書的配置文件

$ cp ~/kubernetes-starter/target/ca/ca-config.json /etc/kubernetes/ca
$ cp ~/kubernetes-starter/target/ca/ca-csr.json /etc/kubernetes/ca

#生成證書和秘鑰

$ cd /etc/kubernetes/ca
$ cfssl gencert -initca ca-csr.json | cfssljson -bare ca

#生成完成後會有以下文件(我們最終想要的就是ca-key.pem和ca.pem,一個秘鑰,一個證書)

$ ls
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem

4. 改造etcd

4.1 準備證書

etcd節點需要提供給其他服務訪問,就要驗證其他服務的身份,所以需要一個標識自己監聽服務的server證書,當有多個etcd節點的時候也需要client證書與etcd集群其他節點交互,當然也可以client和server使用同一個證書因為它們本質上沒有區別。

#etcd證書放在這

$ mkdir -p /etc/kubernetes/ca/etcd

#準備etcd證書配置

$ cp ~/kubernetes-starter/target/ca/etcd/etcd-csr.json /etc/kubernetes/ca/etcd/
$ cd /etc/kubernetes/ca/etcd/

#使用根證書(ca.pem)簽發etcd證書

$ cfssl gencert         -ca=/etc/kubernetes/ca/ca.pem         -ca-key=/etc/kubernetes/ca/ca-key.pem         -config=/etc/kubernetes/ca/ca-config.json         -profile=kubernetes etcd-csr.json | cfssljson -bare etcd

#跟之前類似生成三個文件etcd.csr是個中間證書請求文件,我們最終要的是etcd-key.pem和etcd.pem

$ ls
etcd.csr  etcd-csr.json  etcd-key.pem  etcd.pem

4.2 改造etcd服務

建議大家先比較一下增加認證的etcd配置與原有配置的區別,做到心中有數。 可以使用命令比較:

$ cd ~/kubernetes-starter/
$ vimdiff kubernetes-simple/master-node/etcd.service kubernetes-with-ca/master-node/etcd.service

更新etcd服務:

$ cp ~/kubernetes-starter/target/master-node/etcd.service /lib/systemd/system/
$ systemctl daemon-reload
$ service etcd start

#驗證etcd服務(endpoints自行替換)

$ ETCDCTL_API=3 etcdctl   --endpoints=https://10.0.94.112:2379    --cacert=/etc/kubernetes/ca/ca.pem   --cert=/etc/kubernetes/ca/etcd/etcd.pem   --key=/etc/kubernetes/ca/etcd/etcd-key.pem   endpoint health

如果直接執行上述命令出現如下錯誤:

cluster may be unhealthy: failed to list membersError: client: etcd cluster is unavailable or misconfigured; error #0: malformed HTTP response "\x15\x03\x01\x00\x02\x02"; error #1: dial tcp 127.0.0.1:4001: getsockopt: connection refused

執行export ETCDCTL_ENDPOINT=https://127.0.0.1:2379修改ETCDCTL_ENDPOINT環境變量, 之後再次執行, 則可以看到結果.

5. 改造api-server

5.1 準備證書

#api-server證書放在這,api-server是核心,文件夾叫kubernetes吧,如果想叫apiserver也可以,不過相關的地方都需要修改哦

$ mkdir -p /etc/kubernetes/ca/kubernetes

#準備apiserver證書配置

$ cp ~/kubernetes-starter/target/ca/kubernetes/kubernetes-csr.json /etc/kubernetes/ca/kubernetes/
$ cd /etc/kubernetes/ca/kubernetes/

#使用根證書(ca.pem)簽發kubernetes證書

$ cfssl gencert         -ca=/etc/kubernetes/ca/ca.pem         -ca-key=/etc/kubernetes/ca/ca-key.pem         -config=/etc/kubernetes/ca/ca-config.json         -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes

#跟之前類似生成三個文件kubernetes.csr是個中間證書請求文件,我們最終要的是kubernetes-key.pem和kubernetes.pem

$ ls 
kubernetes.csr  kubernetes-csr.json  kubernetes-key.pem  kubernetes.pem

5.2 改造api-server服務

查看diff

$ cd ~/kubernetes-starter
$ vimdiff kubernetes-simple/master-node/kube-apiserver.service kubernetes-with-ca/master-node/kube-apiserver.service

生成token認證文件

#生成隨機token

$ head -c 16 /dev/urandom | od -An -t x | tr -d ‘ ‘

a691e60cc11e7438deb03a91e70ab000


#按照固定格式寫入token.csv,註意替換token內容

$ echo "a691e60cc11e7438deb03a91e70ab000,kubelet-bootstrap,10001,\"system:kubelet-bootstrap\""> /etc/kubernetes/ca/kubernetes/token.csv

更新api-server服務

$ cp ~/kubernetes-starter/target/master-node/kube-apiserver.service /lib/systemd/system/
$ systemctl daemon-reload
$ service kube-apiserver start

#檢查日誌

$ journalctl -f -u kube-apiserver

6. 改造controller-manager

controller-manager一般與api-server在同一臺機器上,所以可以使用非安全端口與api-server通訊,不需要生成證書和私鑰。

6.1 改造controller-manager服務

查看diff

$ cd ~/kubernetes-starter/
$ vimdiff kubernetes-simple/master-node/kube-controller-manager.service kubernetes-with-ca/master-node/kube-controller-manager.service

更新controller-manager服務

$ cp ~/kubernetes-starter/target/master-node/kube-controller-manager.service /lib/systemd/system/
$ systemctl daemon-reload
$ service kube-controller-manager start


#檢查日誌

$ journalctl -f -u kube-controller-manager

7. 改造scheduler

scheduler一般與apiserver在同一臺機器上,所以可以使用非安全端口與apiserver通訊。不需要生成證書和私鑰。

7.1 改造scheduler服務

查看diff比較會發現兩個文件並沒有區別,不需要改造

$ cd ~/kubernetes-starter/
$ vimdiff kubernetes-simple/master-node/kube-scheduler.service kubernetes-with-ca/master-node/kube-scheduler.service

啟動服務

$ service kube-scheduler start

#檢查日誌

$ journalctl -f -u kube-scheduler

8. 改造kubectl

8.1 準備證書

#kubectl證書放在這,由於kubectl相當於系統管理員,我們使用admin命名

$ mkdir -p /etc/kubernetes/ca/admin

#準備admin證書配置 - kubectl只需客戶端證書,因此證書請求中 hosts 字段可以為空

$ cp ~/kubernetes-starter/target/ca/admin/admin-csr.json /etc/kubernetes/ca/admin/
$ cd /etc/kubernetes/ca/admin/

#使用根證書(ca.pem)簽發admin證書

$ cfssl gencert         -ca=/etc/kubernetes/ca/ca.pem         -ca-key=/etc/kubernetes/ca/ca-key.pem         -config=/etc/kubernetes/ca/ca-config.json         -profile=kubernetes admin-csr.json | cfssljson -bare admin

#我們最終要的是admin-key.pem和admin.pem

$ ls 
admin.csr  admin-csr.json  admin-key.pem  admin.pem

8.2 配置kubectl

#指定apiserver的地址和證書位置(ip自行修改)

$ kubectl config set-cluster kubernetes         --certificate-authority=/etc/kubernetes/ca/ca.pem         --embed-certs=true         --server=https://10.0.94.112:6443

#設置客戶端認證參數,指定admin證書和秘鑰

$ kubectl config set-credentials admin         --client-certificate=/etc/kubernetes/ca/admin/admin.pem         --embed-certs=true         --client-key=/etc/kubernetes/ca/admin/admin-key.pem

#關聯用戶和集群

$ kubectl config set-context kubernetes         --cluster=kubernetes --user=admin

#設置當前上下文

$ kubectl config use-context kubernetes


#設置結果就是一個配置文件,可以看看內容

$ cat ~/.kube/config

驗證master節點

#可以使用剛配置好的kubectl查看一下組件狀態

$ kubectl get componentstatus
NAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok
controller-manager   Healthy   ok
etcd-0               Healthy   {"health": "true"}

9. 改造calico-node

9.1 準備證書

後續可以看到calico證書用在四個地方:

  • calico/node 這個docker 容器運行時訪問 etcd 使用證書
  • cni 配置文件中,cni 插件需要訪問 etcd 使用證書
  • calicoctl 操作集群網絡時訪問 etcd 使用證書
  • calico/kube-controllers 同步集群網絡策略時訪問 etcd 使用證書
#calico證書放在這

$ mkdir -p /etc/kubernetes/ca/calico

#準備calico證書配置 - calico只需客戶端證書,因此證書請求中 hosts 字段可以為空

$ cp ~/kubernetes-starter/target/ca/calico/calico-csr.json /etc/kubernetes/ca/calico/
$ cd /etc/kubernetes/ca/calico/

#使用根證書(ca.pem)簽發calico證書

$ cfssl gencert         -ca=/etc/kubernetes/ca/ca.pem         -ca-key=/etc/kubernetes/ca/ca-key.pem         -config=/etc/kubernetes/ca/ca-config.json         -profile=kubernetes calico-csr.json | cfssljson -bare calico

#我們最終要的是calico-key.pem和calico.pem

$ ls 
calico.csr  calico-csr.json  calico-key.pem  calico.pem

9.2 改造calico服務

查看diff

$ cd ~/kubernetes-starter
$ vimdiff kubernetes-simple/all-node/kube-calico.service kubernetes-with-ca/all-node/kube-calico.service

通過diff會發現,calico多了幾個認證相關的文件:
/etc/kubernetes/ca/ca.pem
/etc/kubernetes/ca/calico/calico.pem
/etc/kubernetes/ca/calico/calico-key.pem

scp -r /etc/kubernetes/ca/ [email protected]:/etc/kubernetes/

由於calico服務是所有節點都需要啟動的,大家需要把這幾個文件拷貝到每臺服務器上

更新calico服務

$ cp ~/kubernetes-starter/target/all-node/kube-calico.service /lib/systemd/system/
$ systemctl daemon-reload
$ service kube-calico start

#驗證calico(能看到其他節點的列表就對啦)

$ calicoctl node status

10. 改造kubelet

我們這裏讓kubelet使用引導token的方式認證,所以認證方式跟之前的組件不同,它的證書不是手動生成,而是由工作節點TLS BootStrap 向api-server請求,由主節點的controller-manager 自動簽發。

10.1 創建角色綁定(主節點)

引導token的方式要求客戶端向api-server發起請求時告訴他你的用戶名和token,並且這個用戶是具有一個特定的角色:system:node-bootstrapper,所以需要先將 bootstrap token 文件中的 kubelet-bootstrap 用戶賦予這個特定角色,然後 kubelet 才有權限發起創建認證請求。在主節點執行下面命令

#可以通過下面命令查詢clusterrole列表

$ kubectl -n kube-system get clusterrole


#可以回顧一下token文件的內容

$ cat /etc/kubernetes/ca/kubernetes/token.csv
a691e60cc11e7438deb03a91e70ab000,kubelet-bootstrap,10001,"system:kubelet-bootstrap"

#創建角色綁定(將用戶kubelet-bootstrap與角色system:node-bootstrapper綁定)

$ kubectl create clusterrolebinding kubelet-bootstrap          --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

10.2 創建bootstrap.kubeconfig(工作節點)

這個配置是用來完成bootstrap token認證的,保存了像用戶,token等重要的認證信息,這個文件可以借助kubectl命令生成:(也可以自己寫配置)

#設置集群參數(註意替換ip)

$ kubectl config set-cluster kubernetes         --certificate-authority=/etc/kubernetes/ca/ca.pem         --embed-certs=true         --server=https://10.0.94.112:6443         --kubeconfig=bootstrap.kubeconfig

#設置客戶端認證參數(註意替換token)

$ kubectl config set-credentials kubelet-bootstrap         --token=a691e60cc11e7438deb03a91e70ab000         --kubeconfig=bootstrap.kubeconfig

#設置上下文

$ kubectl config set-context default         --cluster=kubernetes         --user=kubelet-bootstrap         --kubeconfig=bootstrap.kubeconfig

#選擇上下文

$ kubectl config use-context default --kubeconfig=bootstrap.kubeconfig

#將剛生成的文件移動到合適的位置

$ mv bootstrap.kubeconfig /etc/kubernetes/

10.3 準備cni配置

查看diff

$ cd ~/kubernetes-starter
$ vimdiff kubernetes-simple/worker-node/10-calico.conf kubernetes-with-ca/worker-node/10-calico.conf

copy配置

$ cp ~/kubernetes-starter/target/worker-node/10-calico.conf /etc/cni/net.d/

10.4 改造kubelet服務

查看diff

$ cd ~/kubernetes-starter
$ vimdiff kubernetes-simple/worker-node/kubelet.service kubernetes-with-ca/worker-node/kubelet.service

更新服務

$ cp ~/kubernetes-starter/target/worker-node/kubelet.service /lib/systemd/system/
$ systemctl daemon-reload
$ service kubelet start


#啟動kubelet之後到master節點允許worker加入(批準worker的tls證書請求)
#--------*在主節點執行*---------

$ kubectl get csr|grep ‘Pending‘ | awk ‘{print $1}‘| xargs kubectl certificate approve

#-----------------------------
#檢查日誌

$ journalctl -f -u kubelet

11. 改造kube-proxy

11.1 準備證書

#proxy證書放在這

$ mkdir -p /etc/kubernetes/ca/kube-proxy


#準備proxy證書配置 - proxy只需客戶端證書,因此證書請求中 hosts 字段可以為空。
#CN 指定該證書的 User 為 system:kube-proxy,預定義的 ClusterRoleBinding system:node-proxy 將User system:kube-proxy 與 Role system:node-proxier 綁定,授予了調用 kube-api-server proxy的相關 API 的權限

$ cp ~/kubernetes-starter/target/ca/kube-proxy/kube-proxy-csr.json /etc/kubernetes/ca/kube-proxy/
$ cd /etc/kubernetes/ca/kube-proxy/


#使用根證書(ca.pem)簽發calico證書

$ cfssl gencert         -ca=/etc/kubernetes/ca/ca.pem         -ca-key=/etc/kubernetes/ca/ca-key.pem         -config=/etc/kubernetes/ca/ca-config.json         -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy

#我們最終要的是kube-proxy-key.pem和kube-proxy.pem

$ ls 
kube-proxy.csr  kube-proxy-csr.json  kube-proxy-key.pem  kube-proxy.pem

11.2 生成kube-proxy.kubeconfig配置

#設置集群參數(註意替換ip)

$ kubectl config set-cluster kubernetes         --certificate-authority=/etc/kubernetes/ca/ca.pem         --embed-certs=true         --server=https://10.0.94.112:6443         --kubeconfig=kube-proxy.kubeconfig

#置客戶端認證參數

$ kubectl config set-credentials kube-proxy         --client-certificate=/etc/kubernetes/ca/kube-proxy/kube-proxy.pem         --client-key=/etc/kubernetes/ca/kube-proxy/kube-proxy-key.pem         --embed-certs=true         --kubeconfig=kube-proxy.kubeconfig

#設置上下文參數

$ kubectl config set-context default         --cluster=kubernetes         --user=kube-proxy         --kubeconfig=kube-proxy.kubeconfig

#選擇上下文

$ kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig

#移動到合適位置

$ mv kube-proxy.kubeconfig /etc/kubernetes/kube-proxy.kubeconfig

11.3 改造kube-proxy服務

查看diff

$ cd ~/kubernetes-starter
$ vimdiff kubernetes-simple/worker-node/kube-proxy.service kubernetes-with-ca/worker-node/kube-proxy.service

經過diff你應該發現kube-proxy.service沒有變化

啟動服務

#如果之前的配置沒有了,可以重新復制一份過去

$ cp ~/kubernetes-starter/target/worker-node/kube-proxy.service /lib/systemd/system/
$ systemctl daemon-reload


#安裝依賴軟件

$ yum install conntrack -y


#啟動服務

$ service kube-proxy start

#查看日誌

$ journalctl -f -u kube-proxy

12. 改造kube-dns

kube-dns有些特別,因為它本身是運行在kubernetes集群中,以kubernetes應用的形式運行。所以它的認證授權方式跟之前的組件都不一樣。它需要用到service account認證和RBAC授權。
service account認證:
每個service account都會自動生成自己的secret,用於包含一個ca,token和secret,用於跟api-server認證
RBAC授權:
權限、角色和角色綁定都是kubernetes自動創建好的。我們只需要創建一個叫做kube-dns的 ServiceAccount即可,官方現有的配置已經把它包含進去了。

12.1 準備配置文件

我們在官方的基礎上添加的變量,生成適合我們集群的配置。直接copy就可以啦

$ cd ~/kubernetes-starter
$ vimdiff kubernetes-simple/services/kube-dns.yaml kubernetes-with-ca/services/kube-dns.yaml

大家可以看到diff只有一處,新的配置沒有設定api-server。不訪問api-server,它是怎麽知道每個服務的cluster ip和pod的endpoints的呢?這就是因為kubernetes在啟動每個服務service的時候會以環境變量的方式把所有服務的ip,端口等信息註入進來。

12.2 創建kube-dns

$ kubectl create -f ~/kubernetes-starter/target/services/kube-dns.yaml

#看看啟動是否成功

$ kubectl -n kube-system get pods

13. 再試牛刀

終於,安全版的kubernetes集群我們部署完成了。
下面我們使用新集群先溫習一下之前學習過的命令,然後再認識一些新的命令,新的參數,新的功能。

k8s1.9.0安裝--完整集群部署