簡單的 Kubernetes 集羣搭建

本文使用「署名 4.0 國際 (CC BY 4.0)」許可協議,歡迎轉載、或從新修改使用,但須要註明來源。 署名 4.0 國際 (CC BY 4.0)html

本文做者: 蘇洋node

建立時間: 2018年10月03日 統計字數: 28480字 閱讀時間: 57分鐘閱讀 本文連接: soulteary.com/2018/10/03/…linux


簡單的 Kubernetes 集羣搭建

一直以來由於機器資源捉襟見肘,使用 GitLab CI 配合 compose 完成了多數自動化構建和部署的事情,可是隨着運行服務愈來愈多,管理一大堆 docker-compose.yml 和服務的成本也變的愈來愈高。git

做爲一個懶人,購置了一臺頂配的 ELite Desk G4 800 來做爲資源,計劃搭建 K8S 配合 GitLab 的 Auto DevOps 做爲接下來使用的方案。github

網上關於 K8S 的搭建使用有不少,可是多數都是基於 CentOS、二進制包的教程,太過陳舊和麻煩。docker

並且在操做過程當中,基本都是一路 Next,缺乏調試驗證,本篇以一個 K8S 新手視角,介紹如何快速搭建一套開發可用的 mini 集羣。編程

我這裏計劃建立一個單 Master 雙子節點的集羣。json

官方工具箱 Kubeadm

Kubeadm 做爲官方推出的 K8S 工具箱,旨在協助開發者可以快速 搭建使用 Kubernetes 的各類核心功能,包括:bootstrap

  • 配置並啓動 master 節點
  • 配置並啓動 worker 節點,並加入 master 節點,組成集羣
  • 升級集羣到最新版本
  • 管理你的集羣的詳細配置
  • 管理你的集羣 token

想要了解更多,能夠查看官方文檔ubuntu

爲了簡化操做和維護成本,本次集羣的搭建就使用它來進行。不過相比較手動配置的靈活,kubeadm 目前存在一些限制,好比它僅支持部分版本的操做系統,參考官方文檔:開始安裝 kubeadm 以前

並且每臺主機或者虛擬機至少要分配 2核心2GB 的內存。

我這裏使用的資源是三臺 2核心4GB 的虛擬機,操做系統爲 ubuntu ,爲了使用 docker 官方的軟件包,我將系統版本選擇爲 16.04

我在這裏對這三臺機器分別進行了命名和固定IP分配:

  • (Master Node) potato 10.11.12.180
  • (Worker Node) potato-chips 10.11.12.181
  • (Worker Node) potato-salad 10.11.12.182

配置基礎環境

在開始搭建集羣以前,咱們須要先進行一些基礎環境的配置。

SSH 認證授信

接下來的操做,包含大量的 ssh 操做,爲了不麻煩,能夠將你的用戶祕鑰添加到遠程主機中。

ssh-copy-id -i ~/.ssh/YOUR_KEY.pub YOUR_HOST_NAME_OR_HOST_IP 
複製代碼

徹底關閉SWAP交換分區

網上的教程通常都只會引導用戶使用 swapoff 命令進行分區關閉,可是一旦主機重啓,這個命令的做用就「失效」了,因此這裏建議使用我下面提供的命令一勞永逸的徹底關閉 swap 分區。

sudo swapoff -a
cat /etc/fstab | grep -v '^#' | grep -v 'swap' | sudo tee /etc/fstab
複製代碼

配置主機名稱和基礎解析

在建設集羣以前,咱們須要確保節點之間的如下要素不一樣:

  • 系統主機名不一樣
  • 硬件 product_id
  • 網卡 MAC地址

咱們先設置主機名,好比設置主機名爲 potato

sudo hostnamectl set-hostname potato
複製代碼

設置完主機名稱以後,咱們須要將主機名稱對應的基礎解析指向本地。

echo "127.0.0.1 `hostname`" | sudo tee -a /etc/hosts
複製代碼

至於 MAC 地址,你能夠直接使用 ifconfig 進行設置,也能夠修改 /etc/network/interfaces 進行設置。若是你也是虛擬機用戶,我建議直接在硬件層面進行設置,一勞永逸,另外,若是你在硬件層面設置了 MAC 地址,product_id 也會隨之變化。

提了這麼屢次 product_id ,那麼該如何查看它的內容呢,很簡單:

sudo cat /sys/class/dmi/id/product_uuid
複製代碼

安裝docker

在安裝 K8S 和各類 K8S TOOLBOX 以前,咱們須要先對系統進行一些基礎配置,在以前的文章中,我有介紹過如何更優雅的安裝 docker

可是這裏稍稍有一些不一樣:這裏必須使用指定版本的 docker-ce ,目前 18.0x 的 docker-ce 暫時未經過 K8S 測試驗證,不能被直接使用。

以前的安裝命令 apt install docker-ce 須要被替換爲下面的命令來進行指定版本的軟件安裝:

apt-get update && apt-get install -y docker-ce=$(apt-cache madison docker-ce | grep 17.03 | head -1 | awk '{print $3}')
複製代碼

爲了不軟件在後續維護系統的過程當中被誤升級,咱們能夠鎖定它的版本:

apt-mark docker-ce
複製代碼

加速 docker-ce 的下載和安裝

若是你以爲從官方下載 docker-ce 比較慢,能夠在添加了 gpg 祕鑰後,將添加軟件倉庫地址從官方源改成其餘鏡像源,好比使用下面的命令添加一個新的軟件源:

add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
複製代碼

而後執行前面說到的安裝命令,進行更快速的安裝。

安裝 Kubeadm、Kubectl、Kubelet

這裏參考了部分官方文檔 Creating a single master cluster with kubeadm ,可是請注意,目前官方已經關閉了 v1 版本的 docker 倉庫的接口,因此若是你準備掛代理直接下載軟件鏡像包,須要修改 /etc/docker/daemon.json,強制停用 v1 版本的 API:

{
  "disable-legacy-registry": true
}
複製代碼

因爲 K8S 搭建以後,升級不是很頻繁,能夠直接使用導入離線的軟件包,進行快速的服務搭建和升級,而對機器上的 docker 配置作到使用默認配置不進行改動。

獲取鏡像並導出爲離線鏡像包

咱們這裏使用到的軟件包鏡像名稱列表以下:

k8s.gcr.io/kube-apiserver-amd64:v1.11.3
k8s.gcr.io/kube-controller-manager-amd64:v1.11.3
k8s.gcr.io/kube-scheduler-amd64:v1.11.3
k8s.gcr.io/kube-proxy-amd64:v1.11.3
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd-amd64:3.2.18
k8s.gcr.io/coredns:1.1.3
k8s.gcr.io/kubernetes-dashboard-amd64:v0.10.0

quay.io/coreos/flannel:v0.10.0-amd64
複製代碼

將列表保存爲文件,在能夠獲取鏡像的雲機器上,使用下面的命令能夠自動將鏡像下載並進行導出。

PACKAGES=`cat ./images/11.txt`;

for package in $PACKAGES; do docker pull "$package"; done

docker images | tail -n +2 | grep -v "<none>" | awk '{printf("%s:%s\n", $1, $2)}' | while read IMAGE; do
    echo "find image: $IMAGE"
    filename="$(echo $IMAGE| tr ':' '-' | tr '/' '-').tar"
    echo "save as $filename"
    docker save ${IMAGE} -o $filename
done
複製代碼

而後將下載並導出的 *.tar 鏡像包下載到要搭建集羣的機器上,使用下面的命令便可批量導入鏡像到系統,避免了要爲集羣機器配置代理等操做。

ls *.tar | xargs -I {} docker load -i {}
複製代碼

上面的腳本,我保存在了 GitHub : soulteary/k8s-images-trans-helper

加載 IPVS 內核模塊

爲了不 IPVS 內核模塊沒有加載,而報 RequiredIPVSKernelModulesAvailable 的錯誤,咱們使用下面的命令加載全部支持的 IPVS 模塊。

lsmod | grep ^ip_vs | awk '{print $1}' | xargs -I {} modprobe {}
複製代碼

安裝 K8S 環境

安裝依賴工具、添加 GPG 祕鑰、添加軟件倉庫,進行軟件下載:

apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
複製代碼

上面的命令是官方文檔提供的,實際上你可能會遇到添加 GPG 祕鑰出錯的狀況,而且使用官方源進行下載失敗的狀況,爲此我爲你準備了一套適合國內環境使用的命令。

apt-get update && apt-get install -y apt-transport-https curl
cat google-apt-key.gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-$(lsb_release -cs) main"
apt update && apt install -y kubelet kubeadm kubectl
複製代碼

這裏的 GPG 祕鑰能夠和離線鏡像包同樣,使用雲主機下載下來,放置於你執行命令的目錄,而後使用 cat 命令讀取內容,再使用 apt-key 進行添加操做。

和配置 docker 同樣,咱們須要鎖定軟件版本,避免「意外」的出現。

apt-mark hold kubelet kubeadm kubectl
複製代碼

若是你網速夠快,1分鐘以內,你的 K8S 軟件包就都就緒了,接下來就可以進行集羣的搭建了。

搭建集羣

登陸服務器,使用 kubeadm init 命令進行 master 節點的初始化,由於我選擇使用 flannel 做爲組網工具,因此我在初始化命令後面添加了 CIDR 參數。

kubeadm init --apiserver-advertise-address=10.11.12.180 --pod-network-cidr=10.244.0.0/16
複製代碼

啓動 Master 節點

這裏偷個懶,直接使用 root 用戶啓動程序:

root@potato:~# kubeadm init --apiserver-advertise-address=10.11.12.180 --pod-network-cidr=10.244.0.0/16
[init] using Kubernetes version: v1.11.3
[preflight] running pre-flight checks
I0926 04:05:02.988136    1074 kernel_validator.go:81] Validating kernel version
I0926 04:05:02.988343    1074 kernel_validator.go:96] Validating kernel config
[preflight/images] Pulling images required for setting up a Kubernetes cluster
[preflight/images] This might take a minute or two, depending on the speed of your internet connection
[preflight/images] You can also perform this action in beforehand using 'kubeadm config images pull'
[kubelet] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[preflight] Activating the kubelet service
[certificates] Generated ca certificate and key.
[certificates] Generated apiserver certificate and key.
[certificates] apiserver serving cert is signed for DNS names [potato kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.11.12.180]
[certificates] Generated apiserver-kubelet-client certificate and key.
[certificates] Generated sa key and public key.
[certificates] Generated front-proxy-ca certificate and key.
[certificates] Generated front-proxy-client certificate and key.
[certificates] Generated etcd/ca certificate and key.
[certificates] Generated etcd/server certificate and key.
[certificates] etcd/server serving cert is signed for DNS names [potato localhost] and IPs [127.0.0.1 ::1]
[certificates] Generated etcd/peer certificate and key.
[certificates] etcd/peer serving cert is signed for DNS names [potato localhost] and IPs [10.11.12.180 127.0.0.1 ::1]
[certificates] Generated etcd/healthcheck-client certificate and key.
[certificates] Generated apiserver-etcd-client certificate and key.
[certificates] valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[controlplane] wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
[controlplane] wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.yaml"
[controlplane] wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/manifests/kube-scheduler.yaml"
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/manifests/etcd.yaml"
[init] waiting for the kubelet to boot up the control plane as Static Pods from directory "/etc/kubernetes/manifests" 
[init] this might take a minute or longer if the control plane images have to be pulled
[apiclient] All control plane components are healthy after 38.500989 seconds
[uploadconfig] storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config-1.11" in namespace kube-system with the configuration for the kubelets in the cluster
[markmaster] Marking the node potato as master by adding the label "node-role.kubernetes.io/master=''"
[markmaster] Marking the node potato as master by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "potato" as an annotation
[bootstraptoken] using token: d2y2to.znsihh37rk5calbm
[bootstraptoken] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstraptoken] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstraptoken] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstraptoken] creating the "cluster-info" ConfigMap in the "kube-public" namespace
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join 10.11.12.180:6443 --token d2y2to.znsihh37rk5calbm --discovery-token-ca-cert-hash sha256:ae980b5c80af45b987b2f3e1d343265f3cce7ef66876cf6a6cabaaa4467868d1

root@potato:~# 
複製代碼

這裏若是使用 kubectl get nodes ,會出現下面的錯誤,除非你使用上面輸出日誌中的命令,對於當前用戶進行了配置獨立的處理。

root@potato:~# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
複製代碼

可是做爲一個懶人,我這裏直接使用默認配置,執行:

export KUBECONFIG=/etc/kubernetes/admin.conf
複製代碼

而後再次執行剛剛獲取 node 節點的命令:

root@potato:~# kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
potato    Ready     master    1m        v1.11.3
複製代碼

接着,我能夠經過 kubectl get pods 來看看各個組件是否運行正常:

kubectl get pods --namespace=kube-system
複製代碼
root@potato:~# kubectl get pods --namespace=kube-system
NAME                             READY     STATUS    RESTARTS   AGE
coredns-78fcdf6894-2lbvg         0/1       Pending   0          1m
coredns-78fcdf6894-vztcw         0/1       Pending   0          1m
etcd-potato                      1/1       Running   0          26s
kube-apiserver-potato            1/1       Running   0          28s
kube-controller-manager-potato   1/1       Running   0          14s
kube-proxy-qmmwg                 1/1       Running   0          1m
kube-scheduler-potato            1/1       Running   0          11s
複製代碼

所有都是 Running,一切就緒,咱們開始進行組網,以及附加集羣子節點。

如今 master 節點幾乎就緒,咱們來配置網絡組件:flannel

Flannel 組網

剛纔有提到,我這裏使用官方推薦的工具之一: flannel 來進行網絡組建。

這裏須要先設置 /proc/sys/net/bridge/bridge-nf-call-iptables1,讓虛擬網橋上的數據包能夠被 iptable 處理。

sysctl net.bridge.bridge-nf-call-iptables=1
複製代碼

至於配置,使用官方推薦的便可,很簡單一條命令:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml`
複製代碼

執行完畢,你會看到各類 created 的信息。

kubectl apply -f kube-flannel.yml 
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds created
複製代碼

再次查看組件運行狀態,咱們能夠看到,flannel 已經運行起來了:

root@potato:~# kubectl get pods --namespace=kube-system
NAME                             READY     STATUS    RESTARTS   AGE
kube-flannel-ds-7gx48            1/1       Running   0          7s
複製代碼

好了,master 節點如今就就緒了,接下來咱們來操做其餘的 worker 節點。

添加子節點

下面的操做能夠執行無數多遍,我以一臺 worker 爲例。

在剛剛建立 master 時,命令行輸出告訴咱們要執行下面的命令,來組建一個集羣:

kubeadm join 10.11.12.180:6443 --token d2y2to.znsihh37rk5calbm --discovery-token-ca-cert-hash sha256:ae980b5c80af45b987b2f3e1d343265f3cce7ef66876cf6a6cabaaa4467868d1
複製代碼

若是你的準備工做一項不拉的都執行過了,那麼你將會獲得下面的輸出日誌。

[preflight] running pre-flight checks
I0926 04:23:44.001001    4993 kernel_validator.go:81] Validating kernel version
I0926 04:23:44.001206    4993 kernel_validator.go:96] Validating kernel config
[discovery] Trying to connect to API Server "10.11.12.180:6443"
[discovery] Created cluster-info discovery client, requesting info from "https://10.11.12.180:6443"
[discovery] Requesting info from "https://10.11.12.180:6443" again to validate TLS against the pinned public key
[discovery] Cluster info signature and contents are valid and TLS certificate validates against pinned roots, will use API Server "10.11.12.180:6443"
[discovery] Successfully established connection with API Server "10.11.12.180:6443"
[kubelet] Downloading configuration for the kubelet from the "kubelet-config-1.11" ConfigMap in the kube-system namespace
[kubelet] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[preflight] Activating the kubelet service
[tlsbootstrap] Waiting for the kubelet to perform the TLS Bootstrap...
[patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "potato-chips" as an annotation

This node has joined the cluster:
* Certificate signing request was sent to master and a response
  was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the master to see this node join the cluster.
複製代碼

嗯,沒錯,你已經組建了一個最小的集羣,一臺 master、一臺 worker

爲了讓咱們的集羣更像樣子,你能夠把上面的命令,在其餘的機器上繼續執行,來給這個集羣添加更多的計算資源。

驗證集羣節點信息

當你在全部節點執行完畢以後,返回 master 節點,仍是經過 kubectl get nodes 命令,能夠查看到當前集羣的信息。

root@potato:~# kubectl get nodes
NAME           STATUS    ROLES     AGE       VERSION
potato         Ready     master    10m       v1.11.3
potato-chips   Ready     <none>    1m        v1.11.3
potato-salad   Ready     <none>    1m        v1.11.3
複製代碼

好了,集羣搭建就搞定了。

圖形化控制檯

老是使用命令行太不「環保」了,做爲懶人,咱們可使用官方的 dashboard 插件來進行一些圖形化的交互。

搭建圖形控制檯

和配置 flannel 同樣,配置 dashboard 也可使用官方推薦的配置,一條命令完成操做。

kubectl apply -f https://github.com/kubernetes/dashboard/blob/master/src/deploy/recommended/kubernetes-dashboard.yaml
複製代碼

一樣的,若是你上面的集羣是就緒的,那麼在執行完命令後,也會獲得一堆 created 的信息。

root@potato:~# kubectl apply -f kubernetes-dashboard.yaml 
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created
複製代碼

使用 kubectl get pods 查看當前 pod 的情況。

root@potato:~# kubectl get pods --namespace=kube-system 
NAME                                   READY     STATUS    RESTARTS   AGE
kubernetes-dashboard-767dc7d4d-mw6pv   1/1       Running   0          1m
複製代碼

嗯,同樣是就緒狀態。

可是因爲咱們沒有安裝負載均衡的組件,因此咱們暫時沒法直接訪問 dashboard 以及其餘的部署的應用,除了系統組件的應用都被分配了 K8S 的虛擬內網。

咱們能夠經過 -o wide 參數來查看全部的 pod 分佈狀況:

root@potato:~# kubectl get pods --namespace=kube-system -o wide
NAME                                   READY     STATUS    RESTARTS   AGE       IP             NODE           NOMINATED NODE
coredns-78fcdf6894-2lbvg               1/1       Running   1          5m        10.244.0.9     potato         <none>
coredns-78fcdf6894-vztcw               1/1       Running   1          5m        10.244.0.10    potato         <none>
etcd-potato                            1/1       Running   1          5m        10.11.12.180   potato         <none>
kube-apiserver-potato                  1/1       Running   1          5m        10.11.12.180   potato         <none>
kube-controller-manager-potato         1/1       Running   1          5m        10.11.12.180   potato         <none>
kube-flannel-ds-7gx48                  1/1       Running   1          5m        10.11.12.180   potato         <none>
kube-flannel-ds-njjrp                  1/1       Running   0          5m        10.11.12.181   potato-chips   <none>
kube-flannel-ds-v4btm                  1/1       Running   0          5m        10.11.12.182   potato-salad   <none>
kube-proxy-bcvx6                       1/1       Running   0          5m        10.11.12.182   potato-salad   <none>
kube-proxy-qmmwg                       1/1       Running   1          5m        10.11.12.180   potato         <none>
kube-proxy-xc5j9                       1/1       Running   0          5m        10.11.12.181   potato-chips   <none>
kube-scheduler-potato                  1/1       Running   1          5m        10.11.12.180   potato         <none>
kubernetes-dashboard-767dc7d4d-mw6pv   1/1       Running   0          5m        10.244.2.10    potato-salad   <none>
複製代碼

讓控制檯容許訪問

網上有不少教程是寫在本地如何訪問 dashboard 的,因此他們直接使用 kubectl proxy 是有效的,可是若是你是真的搭建一個集羣,這時這個命令將會失效,由於它監聽的地址是 127.0.0.1

這時,命令須要修改成:

kubectl proxy --address='0.0.0.0' --accept-hosts='^* 而後瀏覽器中訪問: 複製代碼

http://10.11.12.180:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

便可打開你的 `K8S` 集羣控制檯。

![](https://user-gold-cdn.xitu.io/2018/10/3/166388d007b66908?w=610&h=463&f=png&s=50504 "默認驗證界面")

若是你和我同樣,對 固定IP 進行了域名解析,能夠這樣使用:

複製代碼

kubectl proxy --address='0.0.0.0' --accept-hosts='^*.lab.com

對應的訪問地址也就變成了:

http://potato.lab.com:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
複製代碼

可是這時,你訪問這個控制檯,會遇到要求輸入 KubeConfig 或者 Token 的要求,若是你是相對正式的環境使用,那麼不妨閱讀 權限控制 相關文檔。

固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:

kubectl proxy 對 HTTPS 支持不佳,致使沒法登陸 dashboard原文地址

我我的沒有遇到這個問題,由於我使用 Traefik 配合 K8S ,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。

爲控制檯免除權限認證

做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 給控制檯帳號賦予超級用戶權限 ,免於配置一大堆內容。

將下面的內容保存爲 dashboard-admin.yaml(僅適用於正式發佈的版本)

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system
複製代碼

而後和配置 flanneldashboard 同樣,使用 kubectl apply 命令執行啓動。

root@potato:~# kubectl apply -f dashboard-admin.yaml 
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
複製代碼

再次執行剛剛的 proxy 命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。

默認驗證界面

默認驗證界面

最後

基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 Pipeline

—EOF

可是這時,你訪問這個控制檯,會遇到要求輸入 `KubeConfig` 或者 `Token` 的要求,若是你是相對正式的環境使用,那麼不妨閱讀 [權限控制](https://github.com/kubernetes/dashboard/wiki/Access-control) 相關文檔。

固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:

`kubectl proxy` 對 HTTPS 支持不佳,致使沒法登陸 `dashboard`:[原文地址](https://github.com/kubernetes/dashboard/issues/3260#issuecomment-421834585)。

我我的沒有遇到這個問題,由於我使用 Traefik 配合 `K8S` ,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。

### 爲控制檯免除權限認證

做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 [給控制檯帳號賦予超級用戶權限](https://github.com/kubernetes/dashboard/wiki/Access-control#admin-privileges) ,免於配置一大堆內容。

將下面的內容保存爲 `dashboard-admin.yaml`(僅適用於正式發佈的版本)

複製代碼

apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects:

  • kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system
而後和配置 `flannel` 和 `dashboard` 同樣,使用 `kubectl apply` 命令執行啓動。

複製代碼

root@potato:~# kubectl apply -f dashboard-admin.yaml clusterrolebinding.rbac.authorization.k8s.io/kubernetes-… created

再次執行剛剛的 `proxy` 命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。

![](https://user-gold-cdn.xitu.io/2018/10/3/166388d0c4566cf4?w=1109&h=703&f=png&s=82335 "默認驗證界面")

![](https://user-gold-cdn.xitu.io/2018/10/3/166388d09d586f47?w=1117&h=537&f=png&s=90351 "默認驗證界面")

## 最後

基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 `Pipeline` 。

—EOF
</span></div></div></td></tr></table></div></div>

{{</crayonCode>}}

對應的訪問地址也就變成了:

複製代碼

potato.lab.com:8001/api/v1/name…

可是這時,你訪問這個控制檯,會遇到要求輸入 `KubeConfig` 或者 `Token` 的要求,若是你是相對正式的環境使用,那麼不妨閱讀 [權限控制](https://github.com/kubernetes/dashboard/wiki/Access-control) 相關文檔。

固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:

`kubectl proxy` 對 HTTPS 支持不佳,致使沒法登陸 `dashboard`:[原文地址](https://github.com/kubernetes/dashboard/issues/3260#issuecomment-421834585)。

我我的沒有遇到這個問題,由於我使用 Traefik 配合 `K8S` ,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。

### 爲控制檯免除權限認證

做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 [給控制檯帳號賦予超級用戶權限](https://github.com/kubernetes/dashboard/wiki/Access-control#admin-privileges) ,免於配置一大堆內容。

將下面的內容保存爲 `dashboard-admin.yaml`(僅適用於正式發佈的版本)

複製代碼

apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects:

  • kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system
而後和配置 `flannel` 和 `dashboard` 同樣,使用 `kubectl apply` 命令執行啓動。

複製代碼

root@potato:~# kubectl apply -f dashboard-admin.yaml clusterrolebinding.rbac.authorization.k8s.io/kubernetes-… created

再次執行剛剛的 `proxy` 命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。

![](https://user-gold-cdn.xitu.io/2018/10/3/166388d0c4566cf4?w=1109&h=703&f=png&s=82335 "默認驗證界面")

![](https://user-gold-cdn.xitu.io/2018/10/3/166388d09d586f47?w=1117&h=537&f=png&s=90351 "默認驗證界面")

## 最後

基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 `Pipeline` 。

—EOF

複製代碼

便可打開你的 K8S 集羣控制檯。

默認驗證界面

若是你和我同樣,對 固定IP 進行了域名解析,能夠這樣使用:

kubectl proxy --address='0.0.0.0' --accept-hosts='^*.lab.com 對應的訪問地址也就變成了: 複製代碼

potato.lab.com:8001/api/v1/name…

可是這時,你訪問這個控制檯,會遇到要求輸入 `KubeConfig` 或者 `Token` 的要求,若是你是相對正式的環境使用,那麼不妨閱讀 [權限控制](https://github.com/kubernetes/dashboard/wiki/Access-control) 相關文檔。

固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:

`kubectl proxy` 對 HTTPS 支持不佳,致使沒法登陸 `dashboard`:[原文地址](https://github.com/kubernetes/dashboard/issues/3260#issuecomment-421834585)。

我我的沒有遇到這個問題,由於我使用 Traefik 配合 `K8S` ,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。

### 爲控制檯免除權限認證

做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 [給控制檯帳號賦予超級用戶權限](https://github.com/kubernetes/dashboard/wiki/Access-control#admin-privileges) ,免於配置一大堆內容。

將下面的內容保存爲 `dashboard-admin.yaml`(僅適用於正式發佈的版本)

複製代碼

apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects:

  • kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system
而後和配置 `flannel` 和 `dashboard` 同樣,使用 `kubectl apply` 命令執行啓動。

複製代碼

root@potato:~# kubectl apply -f dashboard-admin.yaml clusterrolebinding.rbac.authorization.k8s.io/kubernetes-… created

再次執行剛剛的 `proxy` 命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。

![](https://user-gold-cdn.xitu.io/2018/10/3/166388d0c4566cf4?w=1109&h=703&f=png&s=82335 "默認驗證界面")

![](https://user-gold-cdn.xitu.io/2018/10/3/166388d09d586f47?w=1117&h=537&f=png&s=90351 "默認驗證界面")

## 最後

基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 `Pipeline` 。

—EOF

複製代碼

可是這時,你訪問這個控制檯,會遇到要求輸入 KubeConfig 或者 Token 的要求,若是你是相對正式的環境使用,那麼不妨閱讀 權限控制 相關文檔。

固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:

kubectl proxy 對 HTTPS 支持不佳,致使沒法登陸 dashboard原文地址

我我的沒有遇到這個問題,由於我使用 Traefik 配合 K8S ,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。

爲控制檯免除權限認證

做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 給控制檯帳號賦予超級用戶權限 ,免於配置一大堆內容。

將下面的內容保存爲 dashboard-admin.yaml(僅適用於正式發佈的版本)

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system
複製代碼

而後和配置 flanneldashboard 同樣,使用 kubectl apply 命令執行啓動。

root@potato:~# kubectl apply -f dashboard-admin.yaml 
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
複製代碼

再次執行剛剛的 proxy 命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。

默認驗證界面

默認驗證界面

最後

基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 Pipeline

—EOF

{{}}

對應的訪問地址也就變成了:

http://potato.lab.com:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
複製代碼

可是這時,你訪問這個控制檯,會遇到要求輸入 KubeConfig 或者 Token 的要求,若是你是相對正式的環境使用,那麼不妨閱讀 權限控制 相關文檔。

固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:

kubectl proxy 對 HTTPS 支持不佳,致使沒法登陸 dashboard原文地址

我我的沒有遇到這個問題,由於我使用 Traefik 配合 K8S ,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。

爲控制檯免除權限認證

做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 給控制檯帳號賦予超級用戶權限 ,免於配置一大堆內容。

將下面的內容保存爲 dashboard-admin.yaml(僅適用於正式發佈的版本)

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system
複製代碼

而後和配置 flanneldashboard 同樣,使用 kubectl apply 命令執行啓動。

root@potato:~# kubectl apply -f dashboard-admin.yaml 
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
複製代碼

再次執行剛剛的 proxy 命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。

默認驗證界面

默認驗證界面

最後

基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 Pipeline

—EOF

{{}}

而後瀏覽器中訪問:

http://10.11.12.180:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
複製代碼

便可打開你的 K8S 集羣控制檯。

默認驗證界面

若是你和我同樣,對 固定IP 進行了域名解析,能夠這樣使用:

kubectl proxy --address='0.0.0.0' --accept-hosts='^*.lab.com 對應的訪問地址也就變成了: 複製代碼

potato.lab.com:8001/api/v1/name…

可是這時,你訪問這個控制檯,會遇到要求輸入 `KubeConfig` 或者 `Token` 的要求,若是你是相對正式的環境使用,那麼不妨閱讀 [權限控制](https://github.com/kubernetes/dashboard/wiki/Access-control) 相關文檔。

固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:

`kubectl proxy` 對 HTTPS 支持不佳,致使沒法登陸 `dashboard`:[原文地址](https://github.com/kubernetes/dashboard/issues/3260#issuecomment-421834585)。

我我的沒有遇到這個問題,由於我使用 Traefik 配合 `K8S` ,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。

### 爲控制檯免除權限認證

做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 [給控制檯帳號賦予超級用戶權限](https://github.com/kubernetes/dashboard/wiki/Access-control#admin-privileges) ,免於配置一大堆內容。

將下面的內容保存爲 `dashboard-admin.yaml`(僅適用於正式發佈的版本)

複製代碼

apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects:

  • kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system
而後和配置 `flannel` 和 `dashboard` 同樣,使用 `kubectl apply` 命令執行啓動。

複製代碼

root@potato:~# kubectl apply -f dashboard-admin.yaml clusterrolebinding.rbac.authorization.k8s.io/kubernetes-… created

再次執行剛剛的 `proxy` 命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。

![](https://user-gold-cdn.xitu.io/2018/10/3/166388d0c4566cf4?w=1109&h=703&f=png&s=82335 "默認驗證界面")

![](https://user-gold-cdn.xitu.io/2018/10/3/166388d09d586f47?w=1117&h=537&f=png&s=90351 "默認驗證界面")

## 最後

基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 `Pipeline` 。

—EOF

複製代碼

可是這時,你訪問這個控制檯,會遇到要求輸入 KubeConfig 或者 Token 的要求,若是你是相對正式的環境使用,那麼不妨閱讀 權限控制 相關文檔。

固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:

kubectl proxy 對 HTTPS 支持不佳,致使沒法登陸 dashboard原文地址

我我的沒有遇到這個問題,由於我使用 Traefik 配合 K8S ,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。

爲控制檯免除權限認證

做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 給控制檯帳號賦予超級用戶權限 ,免於配置一大堆內容。

將下面的內容保存爲 dashboard-admin.yaml(僅適用於正式發佈的版本)

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system
複製代碼

而後和配置 flanneldashboard 同樣,使用 kubectl apply 命令執行啓動。

root@potato:~# kubectl apply -f dashboard-admin.yaml 
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
複製代碼

再次執行剛剛的 proxy 命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。

默認驗證界面

默認驗證界面

最後

基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 Pipeline

—EOF

{{}}

對應的訪問地址也就變成了:

http://potato.lab.com:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
複製代碼

可是這時,你訪問這個控制檯,會遇到要求輸入 KubeConfig 或者 Token 的要求,若是你是相對正式的環境使用,那麼不妨閱讀 權限控制 相關文檔。

固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:

kubectl proxy 對 HTTPS 支持不佳,致使沒法登陸 dashboard原文地址

我我的沒有遇到這個問題,由於我使用 Traefik 配合 K8S ,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。

爲控制檯免除權限認證

做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 給控制檯帳號賦予超級用戶權限 ,免於配置一大堆內容。

將下面的內容保存爲 dashboard-admin.yaml(僅適用於正式發佈的版本)

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system
複製代碼

而後和配置 flanneldashboard 同樣,使用 kubectl apply 命令執行啓動。

root@potato:~# kubectl apply -f dashboard-admin.yaml 
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
複製代碼

再次執行剛剛的 proxy 命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。

默認驗證界面

默認驗證界面

最後

基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 Pipeline

—EOF


我如今有一個小小的折騰羣,裏面彙集了一些喜歡折騰的小夥伴。

在不發廣告的狀況下,咱們在裏面會一塊兒聊聊軟件、HomeLab、編程上的一些問題,也會在羣裏不按期的分享一些技術沙龍的資料。

喜歡折騰的小夥伴歡迎掃碼添加好友。(請註明來源和目的,不然不會經過審覈) 關於折騰羣入羣的那些事

關於折騰羣入羣的那些事

相關文章
相關標籤/搜索