kubernetes,簡稱K8s,是一個開源的,用于管理云平臺中多個主機(jī)上的容器化的應(yīng)用,Kubernetes的目標(biāo)是讓部署容器化的應(yīng)用簡單并且高效(powerful),Kubernetes提供了應(yīng)用部署,規(guī)劃,更新,維護(hù)的一種機(jī)制。
優(yōu)勢:
傳統(tǒng)的應(yīng)用部署方式是通過插件或腳本來安裝應(yīng)用。這樣做的缺點是應(yīng)用的運(yùn)行、配置、管理、所有生存周期將與當(dāng)前操作系統(tǒng)綁定,這樣做并不利于應(yīng)用的升級更新/回滾等操作,當(dāng)然也可以通過創(chuàng)建虛擬機(jī)的方式來實現(xiàn)某些功能,但是虛擬機(jī)非常重,并不利于可移植性。
新的方式是通過部署容器方式實現(xiàn),每個容器之間互相隔離,每個容器有自己的文件系統(tǒng) ,容器之間進(jìn)程不會相互影響,能區(qū)分計算資源。相對于虛擬機(jī),容器能快速部署,由于容器與底層設(shè)施、機(jī)器文件系統(tǒng)解耦的,所以它能在不同云、不同版本操作系統(tǒng)間進(jìn)行遷移。
容器占用資源少、部署快,每個應(yīng)用可以被打包成一個容器鏡像,每個應(yīng)用與容器間成一對一關(guān)系也使容器有更大優(yōu)勢,使用容器可以在build或release 的階段,為應(yīng)用創(chuàng)建容器鏡像,因為每個應(yīng)用不需要與其余的應(yīng)用堆棧組合,也不依賴于生產(chǎn)環(huán)境基礎(chǔ)結(jié)構(gòu),這使得從研發(fā)到測試、生產(chǎn)能提供一致環(huán)境。類似地,容器比虛擬機(jī)輕量、更“透明”,這更便于監(jiān)控和管理。
? Master 組件
? 節(jié)點(Node)組件
Kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規(guī)模可伸縮、應(yīng)用容器化管理。在生產(chǎn)環(huán)境中部署一個應(yīng)用程序時,通常要部署該應(yīng)用的多個實例以便對應(yīng)用請求進(jìn)行負(fù)載均衡。
在Kubernetes中,我們可以創(chuàng)建多個容器,每個容器里面運(yùn)行一個應(yīng)用實例,然后通過內(nèi)置的負(fù)載均衡策略,實現(xiàn)對這一組應(yīng)用實例的管理、發(fā)現(xiàn)、訪問,而這些細(xì)節(jié)都不需要運(yùn)維人員去進(jìn)行復(fù)雜的手工配置和處理。
Kubernetes 特點
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可擴(kuò)展: 模塊化,插件化,可掛載,可組合
自動化: 自動部署,自動重啟,自動復(fù)制,自動伸縮/擴(kuò)展
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容器資源監(jiān)測
1.6.4Cluster-level Logging
節(jié)點(Node)組件
2.1kubelet
2.2kube-proxy
2.3docker
2.4RKT
2.5supervisord
2.6fluentd
Master 組件
Master組件提供集群的管理控制中心。Master組件可以在集群中任何節(jié)點上運(yùn)行。但是為了簡單起見,通常在一臺VM/機(jī)器上啟動所有Master組件,并且不會在此VM/機(jī)器上運(yùn)行用戶容器。請參考構(gòu)建高可用群集以來構(gòu)建multi-master-VM。
kube-apiserver
kube-apiserver用于暴露Kubernetes API。任何的資源請求/調(diào)用操作都是通過kube-apiserver提供的接口進(jìn)行。請參閱構(gòu)建高可用群集。
ETCD
etcd是Kubernetes提供默認(rèn)的存儲系統(tǒng),保存所有集群數(shù)據(jù),使用時需要為etcd數(shù)據(jù)提供備份計劃。
kube-controller-manager
kube-controller-manager運(yùn)行管理控制器,它們是集群中處理常規(guī)任務(wù)的后臺線程。邏輯上,每個控制器是一個單獨的進(jìn)程,但為了降低復(fù)雜性,它們都被編譯成單個二進(jìn)制文件,并在單個進(jìn)程中運(yùn)行。
這些控制器包括:
節(jié)點(Node)控制器。
副本(Replication)控制器:負(fù)責(zé)維護(hù)系統(tǒng)中每個副本中的pod。
端點(Endpoints)控制器:填充Endpoints對象(即連接Services&Pods)。
Service Account和Token控制器:為新的Namespace創(chuàng)建默認(rèn)帳戶訪問API Token。
cloud-controller-manager
云控制器管理器負(fù)責(zé)與底層云提供商的平臺交互。云控制器管理器是Kubernetes版本1.6中引入的,目前還是Alpha的功能。
云控制器管理器僅運(yùn)行云提供商特定的(controller loops)控制器循環(huán)。可以通過將–cloud-providerflag設(shè)置為external啟動kube-controller-manager ,來禁用控制器循環(huán)。
cloud-controller-manager 具體功能:
節(jié)點(Node)控制器
路由(Route)控制器
Service控制器
卷(Volume)控制器
kube-scheduler
kube-scheduler監(jiān)視新創(chuàng)建沒有分配到Node的Pod,為Pod選擇一個Node。
插件 addons
插件(addon)是實現(xiàn)集群pod和Services功能的。Pod由Deployments,ReplicationController等進(jìn)行管理。Namespace 插件對象是在kube-system Namespace中創(chuàng)建。
DNS
雖然不嚴(yán)格要求使用插件,但Kubernetes集群都應(yīng)該具有集群 DNS。
群集 DNS是一個DNS服務(wù)器,能夠為 Kubernetes services提供 DNS記錄。
由Kubernetes啟動的容器自動將這個DNS服務(wù)器包含在他們的DNS searches中。
用戶界面
kube-ui提供集群狀態(tài)基礎(chǔ)信息查看。
容器資源監(jiān)測
容器資源監(jiān)控提供一個UI瀏覽監(jiān)控數(shù)據(jù)。
Cluster-level Logging
Cluster-level logging,負(fù)責(zé)保存容器日志,搜索/查看日志。
節(jié)點(Node)組件
節(jié)點組件運(yùn)行在Node,提供Kubernetes運(yùn)行時環(huán)境,以及維護(hù)Pod。
kubelet
kubelet是主要的節(jié)點代理,它會監(jiān)視已分配給節(jié)點的pod,具體功能:
安裝Pod所需的volume。
下載Pod的Secrets。
Pod中運(yùn)行的 docker(或experimentally,rkt)容器。
定期執(zhí)行容器健康檢查。
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通過在主機(jī)上維護(hù)網(wǎng)絡(luò)規(guī)則并執(zhí)行連接轉(zhuǎn)發(fā)來實現(xiàn)Kubernetes服務(wù)抽象。
docker
docker用于運(yùn)行容器。
RKT
rkt運(yùn)行容器,作為docker工具的替代方案。
supervisord
supervisord是一個輕量級的監(jiān)控系統(tǒng),用于保障kubelet和docker運(yùn)行。
fluentd
fluentd是一個守護(hù)進(jìn)程,可提供cluster-level logging.。
集群環(huán)境:
系統(tǒng)centos7
master、node
—————-(前期調(diào)試在每臺進(jìn)行操作)—————-
設(shè)置三臺機(jī)器的主機(jī)名:
master上執(zhí)行:hostnamectl --static set-hostname k8s-master
node1上執(zhí)行:hostnamectl --static set-hostname k8s-node-1
node2上執(zhí)行: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
關(guān)閉防火墻和selinux
systemctl stop firewalld && systemctl disable firewalld && setenforce 0
setenforce 0
sed -i \\\'s/^SELINUX=enforcing$/SELINUX=permissive/\\\' /etc/selinux/config
開啟linux路由轉(zhuǎn)發(fā)功能
echo 1 > /proc/sys/net/ipv4/ip_forward
設(shè)置ssh使服務(wù)器之間互信
mkdir ~/.ssh
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
kubernetes集群組件(需要配置的)
-etcd :一個高可用的K/V鍵值對存儲和服務(wù)發(fā)現(xiàn)系統(tǒng)
-flannel:實現(xiàn)跨主機(jī)的容器網(wǎng)絡(luò)的通信
-kube-apiserver:提供kubernetes集群的api調(diào)用
-kube-controller-manager:確保集群服務(wù)
-kube-scheduler調(diào)度容器:分配到node
-kubelet:在node節(jié)點上按照配置文件中定義的容器規(guī)格啟動容器
-kube-proxy提供網(wǎng)絡(luò)代理服務(wù)
下載依賴包-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
添加官方y(tǒng)um庫
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驅(qū)動,與k8s一致,使用systemd 修改docker cgroup驅(qū)動:
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 # 重啟使配置生效
所有節(jié)點安裝/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)執(zhí)行。
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 指定與其它節(jié)點通信的接口
–pod-network-cidr 指定pod網(wǎng)絡(luò)子網(wǎng),使用fannel網(wǎng)絡(luò)必須使用這個CIDR
–image-repository=registry.aliyuncs.com/google_containers初始化時可以添加下載鏡像的源地址。因為默認(rèn)是google的,國內(nèi)無法訪問。這樣前面就不要提前下載好鏡像了。
用戶設(shè)置權(quán)限(root用戶也需要執(zhí)行)
master 執(zhí)行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安裝Pod網(wǎng)絡(luò)插件(CNI)
master 執(zhí)行
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
—————-(node操作)————–
node節(jié)點加入到master
node1:kubeadm join 192.168.1.100:6443 --token te0fvk.dbf7t1qsu4kpvxe2 \\\\
--discovery-token-ca-cert-hash sha256:dd74bd1b52313dd8664b8147cb6d18a6f8b25c6c5aa4debc3
結(jié)果檢查
node節(jié)點加入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 節(jié)點執(zhí)行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集群中創(chuàng)建一個pod,驗證是否正常運(yùn)行:
$ 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=...
解決方案:發(fā)現(xiàn)殺死進(jìn)程都沒有用,最終重啟一下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
默認(rèn)鏡像國內(nèi)無法訪問,修改鏡像地址為: lizhenliang/kubernetes-dashboard-amd64:v1.10.1
默認(rèn)Dashboard只能集群內(nèi)部訪問,修改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
創(chuàng)建service account并綁定默認(rèn)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資源。然后這個用戶沒有權(quán)限訪問,所以被拒絕了。
k8s中的用戶和認(rèn)證及授權(quán)機(jī)制。
k8s中的用戶、認(rèn)證及授權(quán)機(jī)制簡介,k8s中的用戶有兩種
真實用戶 :如kubelet
服務(wù)賬戶: 即service account(簡寫為sa)
k8s中的認(rèn)證機(jī)制
k8s通過ClusterRoleBinding或者RoleBinding資源來實現(xiàn)對用戶權(quán)限的賦予。
ClusterRole或者Role:意思是集群角色或角色,他們是規(guī)定了一組對集群內(nèi)資源的權(quán)限規(guī)則。
roles和clusterroles的區(qū)別在于: roles只能對某個命令空間內(nèi)的資源定義權(quán)限。而集群角色定義的權(quán)限都是針對整個集群的命名空間的。
將用戶和role綁定起來就實現(xiàn)了對用戶權(quán)限的授予。
創(chuàng)建并導(dǎo)入認(rèn)證證書
創(chuàng)建證書
首先需要確認(rèn)kubectl命令的配置文件,默認(rèn)情況下為/etc/kubernetes/admin.conf,而且已經(jīng)自動創(chuàng)建在$HOME/.kube/config中,如果沒有創(chuàng)建則需要手動賦值。
cat $HOME/.kube/config
如果確認(rèn)有集群的配置,則運(yùn)行以下命令來生成一個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證書,按要求輸入密碼直接回車即可,密碼不要胡亂輸,后面給瀏覽器導(dǎo)入的時候要用。
openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name kubernetes-client
運(yùn)行完后在當(dāng)前目錄會有個kubecfg.p12證書文件,將這個kubecfg.p12證書文件傳到桌面上,可以通過安裝yum install lrzsz,將文件發(fā)送到桌面上
[root@master1] ~$ sz kubecfg.p12
將證書導(dǎo)入chrome瀏覽器
點擊瀏覽器:菜單-設(shè)置-高級-管理證書
選擇“個人”這一欄(適用于chrome71以上版本,71以下不確定行不行),然后點擊導(dǎo)入kubecfg.p12。
剩下的步驟全部默認(rèn),完成后如下:
導(dǎo)入成功后,重啟瀏覽器
chrome://restart
注:使用如下鏈接,更改ip和端口訪問再次訪問
https://192.168.255.140:8443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
此時會彈出類似如下的證書信息對話框,點擊確定即可。
點擊確定之后,會出現(xiàn)下面的界面
選擇登錄方式
kubeconfig、令牌、用戶名和密碼,直接訪問,不使用任何登錄,使用令牌方式登錄,全部資源訪問權(quán)限,先創(chuàng)建一個賬號,再創(chuàng)建一個有全部權(quán)限的clusterroles,將二者用clusterrolebinding綁定起來。
安裝yaml文件時,已創(chuàng)建了一個名為kubernetes-dashboard的服務(wù)賬戶,查看詳情
[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集群權(quán)限對象,你可以用下面的命令查看都有哪些
[root@master2] ~$ kubectl get clusterroles
NAME AGE
admin 4h31m
cluster-admin 4h31m
edit 4h31m
flannel 3h68m
system:aggregate-to-admin 4h31m
system:aggregate-to-edit 4h31m
比如集群管理員,我們詳細(xì)的看一下,*號表示對所有資源有所有權(quán)限。
[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
--------- ----------------- -------------- -----
*.* [] [] [*]
[*] [] [*]
用戶和權(quán)限都有了,將他們綁定起來
將kubernetes-dashboard這個服務(wù)賬戶和cluster-admin這個集群管理員權(quán)限對象綁定起來。
##13. 創(chuàng)建一個yaml文件, vim dashboard.yaml,內(nèi)容如下
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
執(zhí)行
[root@master2] ~$ kubectl create -f dashboard.yaml
查看是否創(chuàng)建成功
[root@master2] ~$ kubectl get clusterrolebindings kubernetes-dashboard
NAME AGE
kubernetes-dashboard 88s
找到kubernetes-dashboard賬戶的token,記下這串token,登錄的時候會使用,這個token默認(rèn)是永久的。
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這個服務(wù)賬戶,它擁有對集群所有資源的所有使用權(quán)限。
通過web方式操作很方便,如下:進(jìn)行擴(kuò)縮容
生產(chǎn)環(huán)境要對不同的人賦予不同的權(quán)限,自定義資源訪問權(quán)限,用kubeconfig方式登錄,每次都要復(fù)制token,會比較麻煩
1、先把config文件復(fù)制到別的地方
[root@master2] ~$ cp .kube/config .
然后把一個具有全部訪問權(quán)限的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... ...
上傳到桌面,選擇登錄
使用用戶名密碼方式登錄,默認(rèn)情況下用戶名密碼登錄沒有啟用。
如果沒有該參數(shù),默認(rèn)使用的是匿名用戶,并且無法檢查提供的憑據(jù)是否有效。
原因是Kubernetes 需要有配置如果要啟用用戶名和密碼驗證,必須在apiserver的部署文件中配置參數(shù) –authorization-mode=ABAC和and –basic-auth-file。
然后在dashboard的部署文件中設(shè)置authentication-mode = basic。默認(rèn)情況下,它的設(shè)置是–authentication-mode = token。
跳過登錄過程,直接訪問
添加參數(shù)- –enable-skip-login
containers:
- args:
- --auto-generate-certificates
- --enable-skip-login
官方文檔:
https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard—1.7.X-and-above
https://github.com/kubernetes/dashboard/wiki/Creating-sample-user
更多關(guān)于云服務(wù)器,域名注冊,虛擬主機(jī)的問題,請訪問三五互聯(lián)官網(wǎng):www.shinetop.cn