部署k8s集羣(親測無坑)

kubernetes 簡介
kubernetes,簡稱K8s,是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單並且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。


優勢:
傳統的應用部署方式是通過插件或腳本來安裝應用。這樣做的缺點是應用的運行、配置、管理、所有生存週期將與當前操作系統綁定,這樣做並不利於應用的升級更新/回滾等操作,當然也可以通過創建虛擬機的方式來實現某些功能,但是虛擬機非常重,並不利於可移植性。
新的方式是通過部署容器方式實現,每個容器之間互相隔離,每個容器有自己的文件系統 ,容器之間進程不會相互影響,能區分計算資源。相對於虛擬機,容器能快速部署,由於容器與底層設施、機器文件系統解耦的,所以它能在不同雲、不同版本操作系統間進行遷移。
容器佔用資源少、部署快,每個應用可以被打包成一個容器鏡像,每個應用與容器間成一對一關係也使容器有更大優勢,使用容器可以在build或release 的階段,爲應用創建容器鏡像,因爲每個應用不需要與其餘的應用堆棧組合,也不依賴於生產環境基礎結構,這使得從研發到測試、生產能提供一致環境。類似地,容器比虛擬機輕量、更“透明”,這更便於監控和管理。


▪ Master 組件
▪ 節點(Node)組件
Kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規模可伸縮、應用容器化管理。在生產環境中部署一個應用程序時,通常要部署該應用的多個實例以便對應用請求進行負載均衡。
在Kubernetes中,我們可以創建多個容器,每個容器裏面運行一個應用實例,然後通過內置的負載均衡策略,實現對這一組應用實例的管理、發現、訪問,而這些細節都不需要運維人員去進行復雜的手工配置和處理。


Kubernetes 特點
可移植: 支持公有云,私有云,混合雲,多重雲(multi-cloud)
可擴展: 模塊化,插件化,可掛載,可組合
自動化: 自動部署,自動重啓,自動複製,自動伸縮/擴展


Master 組件
1.1kube-apiserver
1.2ETCD
1.3kube-controller-manager
1.4cloud-controller-manager
1.5kube-scheduler
1.6插件 addons
1.6.1DNS
1.6.2用戶界面
1.6.3容器資源監測
1.6.4Cluster-level Logging


節點(Node)組件
2.1kubelet
2.2kube-proxy
2.3docker
2.4RKT
2.5supervisord
2.6fluentd


Master 組件
Master組件提供集羣的管理控制中心。Master組件可以在集羣中任何節點上運行。但是爲了簡單起見,通常在一臺VM/機器上啓動所有Master組件,並且不會在此VM/機器上運行用戶容器。請參考構建高可用羣集以來構建multi-master-VM。


kube-apiserver
kube-apiserver用於暴露Kubernetes API。任何的資源請求/調用操作都是通過kube-apiserver提供的接口進行。請參閱構建高可用羣集。


ETCD
etcd是Kubernetes提供默認的存儲系統,保存所有集羣數據,使用時需要爲etcd數據提供備份計劃。


kube-controller-manager
kube-controller-manager運行管理控制器,它們是集羣中處理常規任務的後臺線程。邏輯上,每個控制器是一個單獨的進程,但爲了降低複雜性,它們都被編譯成單個二進制文件,並在單個進程中運行。


這些控制器包括:
節點(Node)控制器。
副本(Replication)控制器:負責維護系統中每個副本中的pod。
端點(Endpoints)控制器:填充Endpoints對象(即連接Services&Pods)。
Service Account和Token控制器:爲新的Namespace創建默認帳戶訪問API Token。


cloud-controller-manager
雲控制器管理器負責與底層雲提供商的平臺交互。雲控制器管理器是Kubernetes版本1.6中引入的,目前還是Alpha的功能。
雲控制器管理器僅運行雲提供商特定的(controller loops)控制器循環。可以通過將--cloud-providerflag設置爲external啓動kube-controller-manager ,來禁用控制器循環。


cloud-controller-manager 具體功能:
節點(Node)控制器
路由(Route)控制器
Service控制器
卷(Volume)控制器


kube-scheduler
kube-scheduler監視新創建沒有分配到Node的Pod,爲Pod選擇一個Node。
插件 addons
插件(addon)是實現集羣pod和Services功能的。Pod由Deployments,ReplicationController等進行管理。Namespace 插件對象是在kube-system Namespace中創建。
DNS
雖然不嚴格要求使用插件,但Kubernetes集羣都應該具有集羣 DNS。
羣集 DNS是一個DNS服務器,能夠爲 Kubernetes services提供 DNS記錄。
由Kubernetes啓動的容器自動將這個DNS服務器包含在他們的DNS searches中。
用戶界面
kube-ui提供集羣狀態基礎信息查看。
容器資源監測
容器資源監控提供一個UI瀏覽監控數據。


Cluster-level Logging
Cluster-level logging,負責保存容器日誌,搜索/查看日誌。
節點(Node)組件
節點組件運行在Node,提供Kubernetes運行時環境,以及維護Pod。
kubelet
kubelet是主要的節點代理,它會監視已分配給節點的pod,具體功能:
安裝Pod所需的volume。
下載Pod的Secrets。
Pod中運行的 docker(或experimentally,rkt)容器。
定期執行容器健康檢查。
Reports the status of the pod back to the rest of the system, by creating amirror podif necessary.
Reports the status of the node back to the rest of the system.


kube-proxy
kube-proxy通過在主機上維護網絡規則並執行連接轉發來實現Kubernetes服務抽象。
docker
docker用於運行容器。
RKT
rkt運行容器,作爲docker工具的替代方案。


supervisord
supervisord是一個輕量級的監控系統,用於保障kubelet和docker運行。
fluentd
fluentd是一個守護進程,可提供cluster-level logging.。

集羣環境:
系統centos7
master、node
----------------(前期調試在每臺進行操作)----------------
設置三臺機器的主機名:

master上執行:hostnamectl --static set-hostname k8s-master
node1上執行:hostnamectl --static set-hostname k8s-node-1
node2上執行:hostnamectl --static set-hostname k8s-node-2

修改每臺hosts文件互解:

cat << EOF >> /etc/hosts 
192.168.180.128 k8s-master
192.168.180.133 k8s-node-1
EOF

關閉防火牆和selinux

systemctl stop firewalld && systemctl disable firewalld && setenforce 0

setenforce 0 
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

開啓linux路由轉發功能

echo "1" > /proc/sys/net/ipv4/ip_forward

設置ssh使服務器之間互信

mkdir ~/.ssh
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

kubernetes集羣組件(需要配置的)
-etcd :一個高可用的K/V鍵值對存儲和服務發現系統
-flannel:實現跨主機的容器網絡的通信
-kube-apiserver:提供kubernetes集羣的api調用
-kube-controller-manager:確保集羣服務
-kube-scheduler調度容器:分配到node
-kubelet:在node節點上按照配置文件中定義的容器規格啓動容器
-kube-proxy提供網絡代理服務

下載依賴包-lvm2-docker等

yum update -y && yum -y install yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --enable docker-ce-nightly
yum-config-manager --enable docker-ce-test

添加官方yum庫

sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

安裝docker

sudo yum install docker-ce docker-ce-cli containerd.io
systemctl enable docker && systemctl start docker
yum-config-manager --enable docker-ce-nightly
yum-config-manager --enable docker-ce-test

或者使用腳本一鍵安裝

curl -fsSL "https://get.docker.com/" | sh
systemctl enable --now docker

修改docker cgroup驅動,與k8s一致,使用systemd 修改docker cgroup驅動:

native.cgroupdriver=systemd
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF
systemctl restart docker  # 重啓使配置生效

所有節點安裝/kubeadm/kubelet/kubectl

添加YUM源

-------------------阿里雲YUM-------------------

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

-------------------Google YUM-------------------

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

安裝kubelet kubeadm kubectl

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet

----------------(master操作)--------------
部署Kubernetes Master

在(Master)執行。

 kubeadm init \
  --apiserver-advertise-address=192.168.180.128 \
  --image-repository registry.aliyuncs.com/google_containers \
  --service-cidr=10.1.0.0/16 \
  --pod-network-cidr=10.244.0.0/16

--apiserver-advertise-address 指定與其它節點通信的接口
--pod-network-cidr 指定pod網絡子網,使用fannel網絡必須使用這個CIDR
--image-repository=registry.aliyuncs.com/google_containers初始化時可以添加下載鏡像的源地址。因爲默認是google的,國內無法訪問。這樣前面就不要提前下載好鏡像了。

用戶設置權限(root用戶也需要執行)
master 執行

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

安裝Pod網絡插件(CNI)
master 執行

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

----------------(node操作)--------------

node節點加入到master

node1:kubeadm join 192.168.1.100:6443 --token te0fvk.dbf7t1qsu4kpvxe2 \
--discovery-token-ca-cert-hash sha256:dd74bd1b52313dd8664b8147cb6d18a6f8b25c6c5aa4debc3

結果檢查
node節點加入master輸出信息如下:

[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.15" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Activating the kubelet service
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

----------------(master操作)--------------

master 節點執行kubectl get nodes

[root@master ~]# kubectl get nodesNAME     
STATUS   ROLES    AGE     VERSION
master   Ready    master   14m     v1.15.2
node1    Ready    <none>   3m36s   v1.15.2
node2    Ready    <none>   101s    v1.15.2

測試kubernetes集羣

在Kubernetes集羣中創建一個pod,驗證是否正常運行:

$ kubectl create deployment nginx --image=nginx
 kubectl expose deployment nginx --port=80 --type=NodePort
 kubectl get pod,svc

《《 初始化 Kubernetes (端口被佔用的問題)
報錯信息
[root@k8s-master01 ~]# kubeadm init --config config.yaml

[init] Using Kubernetes version: v1.10.0
[init] Using Authorization modes: [Node RBAC]
[preflight] Running pre-flight checks.
[preflight] Some fatal errors occurred:
[ERROR Port-6443]: Port 6443 is in use
[ERROR Port-10250]: Port 10250 is in use
[ERROR Port-10251]: Port 10251 is in use
[ERROR Port-10252]: Port 10252 is in use
[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=...
解決方案:發現殺死進程都沒有用,最終重啓一下kubeadm就可以了,如下:
[root@k8s-master01 ~]# kubeadm reset 》》

部署 Dashboard

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
wget  https://raw.githubusercontent.com/kubernetes/dashboard/v1.5.1/src/deploy/kubernetes-dashboard.yaml

默認鏡像國內無法訪問,修改鏡像地址爲: lizhenliang/kubernetes-dashboard-amd64:v1.10.1

默認Dashboard只能集羣內部訪問,修改Service爲NodePort類型,暴露到外部:

vim kubernetes-dashboard.yaml

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard
$ kubectl apply -f kubernetes-dashboard.yaml

注意:安裝v1.10.1之前先將配置文件中版本信息v1.5.1修改爲v1.10.1

docker pull gcr.io/google_containers/kubernetes-dashboard-amd64:v1.10.1

創建service account並綁定默認cluster-admin管理員集羣角色:

$ kubectl create serviceaccount dashboard-admin -n kube-system
 kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
 kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

使用輸出的token登錄Dashboard。

使用apiserver方式訪問平臺

注:自行修改ip以及端口

打開瀏覽器訪問 https://192.168.255.140:8443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

報錯如下:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {
  },
  "status": "Failure",
  "message": "services \"https:kubernetes-dashboard\" is forbidden: User \"system:anonymous\" cannot get services/proxy in the namespace \"kube-system\"",
  "reason": "Forbidden",
  "details": {
    "name": "https:kubernetes-dashboard",
    "kind": "services"
  },
  "code": 403
}

通過message和code,我們使用的是system:anonymous這樣的用戶來訪問位於kube-system命名空間中的名爲https:kubernetes-dashboard的service資源。然後這個用戶沒有權限訪問,所以被拒絕了。

k8s中的用戶和認證及授權機制。

k8s中的用戶、認證及授權機制簡介,k8s中的用戶有兩種
真實用戶 :如kubelet
服務賬戶: 即service account(簡寫爲sa)
k8s中的認證機制
k8s通過ClusterRoleBinding或者RoleBinding資源來實現對用戶權限的賦予。
ClusterRole或者Role:意思是集羣角色或角色,他們是規定了一組對集羣內資源的權限規則。
roles和clusterroles的區別在於: roles只能對某個命令空間內的資源定義權限。而集羣角色定義的權限都是針對整個集羣的命名空間的。

將用戶和role綁定起來就實現了對用戶權限的授予。
部署k8s集羣(親測無坑)

創建並導入認證證書
創建證書
首先需要確認kubectl命令的配置文件,默認情況下爲/etc/kubernetes/admin.conf,而且已經自動創建在$HOME/.kube/config中,如果沒有創建則需要手動賦值。

cat $HOME/.kube/config

如果確認有集羣的配置,則運行以下命令來生成一個p12格式的瀏覽器證書

先生成kubecfg-crt

grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt

生成kubecfg-key

grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key

生成p12證書,按要求輸入密碼直接回車即可,密碼不要胡亂輸,後面給瀏覽器導入的時候要用。

openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"

運行完後在當前目錄會有個kubecfg.p12證書文件,將這個kubecfg.p12證書文件傳到桌面上,可以通過安裝yum install lrzsz,將文件發送到桌面上

[root@master1] ~$ sz kubecfg.p12

將證書導入chrome瀏覽器

點擊瀏覽器:菜單-設置-高級-管理證書

選擇“個人”這一欄(適用於chrome71以上版本,71以下不確定行不行),然後點擊導入kubecfg.p12。

剩下的步驟全部默認,完成後如下:

部署k8s集羣(親測無坑)

部署k8s集羣(親測無坑)

導入成功後,重啓瀏覽器

chrome://restart

注:使用如下鏈接,更改ip和端口訪問再次訪問

https://192.168.255.140:8443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

此時會彈出類似如下的證書信息對話框,點擊確定即可。

部署k8s集羣(親測無坑)

部署k8s集羣(親測無坑)
點擊確定之後,會出現下面的界面

選擇登錄方式
kubeconfig、令牌、用戶名和密碼,直接訪問,不使用任何登錄,使用令牌方式登錄,全部資源訪問權限,先創建一個賬號,再創建一個有全部權限的clusterroles,將二者用clusterrolebinding綁定起來。

安裝yaml文件時,已創建了一個名爲kubernetes-dashboard的服務賬戶,查看詳情

[root@master2] ~$ kubectl describe serviceaccount/kubernetes-dashboard -n kube-system
Name:                kubernetes-dashboard
Namespace:           kube-system
Labels:              k8s-app=kubernetes-dashboard
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   kubernetes-dashboard-token-jwld4
Tokens:              kubernetes-dashboard-token-jwld4
Events:              <none>

而kubernetes集羣安裝好後,他會自動生成一些clusterroles集羣權限對象,你可以用下面的命令查看都有哪些

[root@master2] ~$ kubectl get  clusterroles
NAME                                                                   AGE
admin                                                                  4h21m
cluster-admin                                                          4h21m
edit                                                                   4h21m
flannel                                                                3h58m
system:aggregate-to-admin                                              4h21m
system:aggregate-to-edit                                               4h21m

比如集羣管理員,我們詳細的看一下,*號表示對所有資源有所有權限。

[root@master2] ~$ kubectl describe  clusterroles/cluster-admin
Name:         cluster-admin
Labels:       kubernetes.io/bootstrapping=rbac-defaults
Annotations:  rbac.authorization.kubernetes.io/autoupdate: true
PolicyRule:
  Resources  Non-Resource URLs  Resource Names  Verbs
  ---------  -----------------  --------------  -----
  *.*        []                 []              [*]
             [*]                []              [*]

用戶和權限都有了,將他們綁定起來

將kubernetes-dashboard這個服務賬戶和cluster-admin這個集羣管理員權限對象綁定起來。

##13. 創建一個yaml文件, vim dashboard.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

執行

[root@master2] ~$ kubectl create -f dashboard.yaml

查看是否創建成功

[root@master2] ~$ kubectl get clusterrolebindings kubernetes-dashboard
NAME                   AGE
kubernetes-dashboard   88s

找到kubernetes-dashboard賬戶的token,記下這串token,登錄的時候會使用,這個token默認是永久的。

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubernetes-dashboard-token | awk '{print $1}')
Name:         kubernetes-dashboard-token-jwld4
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: kubernetes-dashboard
              kubernetes.io/service-account.uid: a2ced45f-8b61-11e9-b98f-0050563ff983

Type:  kubernetes.io/service-account-token

Data

namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1qd2xkNCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImEyY2VkNDVmLThiNjEtMTFlOS1iOThmLTAwNTA1NjNmZjk4MyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.VzsWE80t7AEMB891rxBKJVMxwt5DtuzA23_-SLxxQcjpaB80LBfB09WqUSe6G6vrkRdpMQ3wDLA2SIFCQVAapAHl-J45NuPyhxh8A-DNpfGpEk3uxFqXkn5WXYasbeCIcHw6TII27PTwG6wgS_q1qEbOf4LYJHjExdqypIqAj__F2RRGTqER378qVvJrHJndL5M6W2PhINazLOEqezxKxDRBigMFU7luOYvWCxSPFhjSd3LrsMfWwSRY-Jq5-tUEhsI7uU7Yyb3UIDDiXex-8Mwbida_TgpcIZi6BaEclPygSSfq1a177r97hnxcdv02X9ooOghztSGKM-1bDBWhNg
ca.crt:     1025 bytes

再次訪問dashboard,輸入token登錄後界面如下;
此時訪問dashboard的主體是kubernetes-dashboard這個服務賬戶,它擁有對集羣所有資源的所有使用權限。
部署k8s集羣(親測無坑)

通過web方式操作很方便,如下:進行擴縮容

部署k8s集羣(親測無坑)

生產環境要對不同的人賦予不同的權限,自定義資源訪問權限,用kubeconfig方式登錄,每次都要複製token,會比較麻煩

1、先把config文件複製到別的地方

[root@master2] ~$ cp .kube/config .

然後把一個具有全部訪問權限的token追加到最後一行。先找出token

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-token | awk '{print $1}') |grep token|tail -1

追加到config中,如下

users:
- name: kubernetes-admin
  user:
    client-certificate-data: LS0tLS1CRUd....
    client-key-data: LS0tLS1CRUdJTiBSU......
    token: eyJhbGciO... ...

上傳到桌面,選擇登錄

部署k8s集羣(親測無坑)

使用用戶名密碼方式登錄,默認情況下用戶名密碼登錄沒有啓用。

如果沒有該參數,默認使用的是匿名用戶,並且無法檢查提供的憑據是否有效。
原因是Kubernetes 需要有配置

如果要啓用用戶名和密碼驗證,必須在apiserver的部署文件中配置參數 --authorization-mode=ABAC和and --basic-auth-file。

然後在dashboard的部署文件中設置authentication-mode = basic。默認情況下,它的設置是--authentication-mode = token。

部署k8s集羣(親測無坑)

跳過登錄過程,直接訪問
添加參數- --enable-skip-login

  containers:
  - args:
    - --auto-generate-certificates
    - --enable-skip-login

部署k8s集羣(親測無坑)

官方文檔:
https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard—1.7.X-and-above
https://github.com/kubernetes/dashboard/wiki/Creating-sample-user

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章