Kubernetes
-
Kubernetes简称K8S;
-
Kubernetes是Google开源的容器集群管理平台;
-
利用K8S能很方便的管理多台Docker主机中的容器;
-
用于跨主机群集自动部署,扩展和操作应用程序容器;
-
提供以容器为中心的基础架构;
-
Kubernetes 版本查阅地址: https://github.com/kubernetes/kubernetes/releases
-
Kubernetes的目标:是建立一个组件和工具的生态系统,以减轻在公共云和私有云中运行应用程序的负担。
-
K8S主要功能:
- 将多台Docker主机抽象为一个资源,以集群方式管理容器,包括任务调度、资源管理、弹性伸缩、滚动升级等功能;
- 使用编排系统(YAML File)快速构建容器集群,提供负载均衡,解决容器直接关联及通信问题;
- 自动管理和修复容器,简单说,比如创建一个集群,里面有10个容器,若某个容器异常关闭,那么,会尝试重启或重新分配容器,始终保证有10个容器在运行,而杀死多余的。
-
使用Kubernetes,可以快速高效地响应客户需求:
- 快速,可预测地部署应用程序。
- 在运行中扩展应用程序。
- 无缝推出新功能。
- 仅使用您需要的资源来优化硬件的使用。
kubernetes角色组成:
1)Pod:
- 是k8s的最小操作单元,一个pod可以由一个或多个容器组成;
- 同一个pod只能运行在同一个主机上,共享相同的volumes、network、namespace;
2)ReplicationController(RC)
- RC用来管理pod,一个RC可以由一个或多个pod组成,在RC被创建后,系统会根据定义好的副本数来创建pod数量;
- 在运行过程中,若pod数量小于定义的,就会重启停止的或重新分配pod,反之杀死多余的;
- 当然,也可以动态伸缩运行的pods规模;
- RC通过label关联对应的pods,在滚动升级中,RC采用一个一个替换要更新的整个pods中的pod;
3)Service
- Service定义了一个pod逻辑集合的抽象资源,pod集合中的容器提供相同的功能;
- 集合根据定义的Label和selector完成,
- 当创建一个Service后,会分配一个Cluster IP,这个IP与定义的端口提供这个集合一个统一的访问接口,并且实现负载均衡;
4)Label
- Label是用于区分Pod、Service、RC的key/value键值对;
- Pod、Service、RC可以有多个label,但是每个label的key只能对应一个;
- 主要是将Service的请求通过label转发给后端提供服务的Pod集合;
kubernetes组件组成:
1)kubectl
- 客户端命令行工具,将接受的命令格式化后发送给kube-apiserver,作为整个系统的操作入口;
2)kube-apiserver
- 作为整个系统的控制入口,以REST API服务提供接口;
3)kube-controller-manager
- 用来执行整个系统中的后台任务,包括节点状态状况、pod个数、pods和service的关联等;
4)kube-scheduler
- 负责节点资源管理,接受来自kube-apiserver创建pods任务,并分配到某个节点;
5)etcd
- 负责节点间的服务发现和配置共享;
6)kube-proxy
- 运行在每个计算节点上,负责pod网络代理。定时从etcd获取到service信息来做相应的策略;
7)kubelet
- 运行在每个计算节点上,作为agent,接受分配该节点的pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver;
8)DNS
- 一个可选的DNS服务,用于为每个Service对象创建DNS记录,这样所有的Pod就可以通过DNS访问服务了;
部署K8S
- 系统要求: 至少2核CPU、2G内存、20G硬盘
- K8S版本1.13,对应的docker版本1.13.1、17.03、17.06、17.09、18.06、18.09
0.环境拓扑
主机部署
ip地址 主机名 角色 CPU 内存 192.168.4.11 master #master、etcd >=2c >=2G 192.168.4.12 node1 #worker >=2c >=2G 192.168.4.13 node2 #worker >=2c >=2G
软件版本
系统类型 Docker版本 Kubernetes版本 Kubeadm版本 Kubectl版本 Kubelet版本 CentOS-7.4 18.06.1-ce v1.13 v1.13 v1.13 v1.13
[#####==========我说过这是分割线吗==========#####]
一、环境准备
1.配置免密登陆
sed -i '/^Host */a \ StrictHostKeyChecking no' /etc/ssh/ssh_config #关闭严格的主机密钥检测
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa #生成密钥
for i in 192.168.4.{11..13} #分发
do
ssh-copy-id $i
done
2.配置hosts
echo "
192.168.4.11 master
192.168.4.12 node1
192.168.4.13 node2
" >> /etc/hosts
for i in 192.168.4.{11..13}
do
scp /etc/hosts $i:/etc/
done
# 修改主机名
for i in 192.168.4.{11..13}
do
if [ "$i" == "192.168.4.11" ]; then
name=master
elif [ "$i" == "192.168.4.12" ]; then
name=node1
else
name=node2
fi
ssh $i "hostnamectl set-hostname $name"
done
3.关闭防火墙、SELinux、SWAP
for i in 192.168.4.{11..13}
do
ssh $i 'systemctl stop firewalld;systemctl disable firewalld; #关闭防火墙
setenforce 0; #关闭SELinux
sed -i "/^SELINUX=/c SELINUX=disabled" /etc/selinux/config;
sed -i "/^SELINUX=/c SELINUX=disabled" /etc/sysconfig/selinux;
swapoff -a; #关闭SWAP
sed -i "s/.*swap.*/#&/" /etc/fstab
'
done
4.修改iptables相关参数
for i in 192.168.4.{11..13}
do
ssh $i "
echo 'vm.swappiness = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
' > /etc/sysctl.d/k8s.conf
modprobe br_netfilter #使配置生效
sysctl -p /etc/sysctl.d/k8s.conf
lsmod |grep br_netfilter #确认模块生效
"
done
for i in 192.168.4.{11..13} #开机自动加载模块
do
ssh $i "
echo '#!/bin/bash
for file in /etc/sysconfig/modules/*.modules
do
[ -x $file ] && file
done' > /etc/rc.sysinit
echo 'modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
' > /etc/sysconfig/modules/br_netfilter.modules
chmod 755 /etc/sysconfig/modules/br_netfilter.modules
"
done
5.加载ipvs相关模块
for i in 192.168.4.{11..13}
do
ssh $i "
echo '#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4' > /etc/sysconfig/modules/ipvs.modules
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
"
done
6.修改Linux 资源配置文件,调高ulimit最大打开数和systemctl管理的服务文件最大打开数
for i in 192.168.4.{11..13}
do
ssh $i '
echo "* soft nofile 655360" >> /etc/security/limits.conf
echo "* hard nofile 655360" >> /etc/security/limits.conf
echo "* soft nproc 655360" >> /etc/security/limits.conf
echo "* hard nproc 655360" >> /etc/security/limits.conf
echo "* soft memlock unlimited" >> /etc/security/limits.conf
echo "* hard memlock unlimited" >> /etc/security/limits.conf
echo "DefaultLimitNOFILE=1024000" >> /etc/systemd/system.conf
echo "DefaultLimitNPROC=1024000" >> /etc/systemd/system.conf
'
done
for i in 192.168.4.{11..13}
do
ssh $i "ulimit -Hn" #确认ulimit
done
7.配置yum源
- 安装yum工具
yum -y install yum-utils
- 阿里基础源
yum-config-manager --add-repo http://mirrors.aliyun.com/repo/Centos-7.repo
- epel源
yum -y install epel-release
- 阿里docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 阿里K8S源
echo "
[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
" > /etc/yum.repos.d/kubernetes.repo
- 分发repo
for i in 192.168.4.{11..13}
do
scp -r /etc/yum.repos.d $i:/etc/
ssh $i "
ssh $i 'yum clean all; yum repolist' &
"
done
8.配置时间同步
- 配置master节点
yum -y install chrony
sed -i 's/^server/#&/' /etc/chrony.conf
echo 'server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst
allow all' >> /etc/chrony.conf
systemctl enable chronyd && systemctl restart chronyd
timedatectl set-ntp true
- 配置node节点
for i in 192.168.4.{12..13}
do
ssh $i "
yum install -y chrony
sed -i 's/^server/#&/' /etc/chrony.conf
echo 'server 192.168.4.11 iburst' >> /etc/chrony.conf
systemctl enable chronyd && systemctl restart chronyd
" &
done
- 确认时间同步
for i in 192.168.4.{11..13}
do
ssh $i "chronyc sources"
done
9.安装其它软件
for i in 192.168.4.{11..13}
do
ssh $i "
yum -y install ipset ipvsadm #ipvs使用
yum -y install bash-completion #自动补全使用
" &
done
10.重启主机
- 配置完成后最好重启一次主机
for i in 192.168.4.{12,13,11}
do
ssh $i "reboot"
done
[#####==========我说过这是分割线吗==========#####]
二、部署Docker(所有节点)
1.安装docker
yum list docker-ce --showduplicates #显示docker-ce的所有版本
for i in 192.168.4.{11..13}
do
ssh $i "yum -qy install docker-ce-18.06.1.ce-3.el7" &
done
2.配置镜像加速器和docker数据存放路径
mkdir -p /etc/docker
echo '{
"registry-mirrors": ["https://r8h1ihfn.mirror.aliyuncs.com"],
"graph": "/tol/docker-data"
}' > /etc/docker/daemon.json
for i in 192.168.4.{11..13}
do
scp -r /etc/docker $i:/etc/
ssh $i "systemctl daemon-reload"
done
3.启动docker
for i in 192.168.4.{11..13}
do
ssh $i "
systemctl start docker && systemctl enable docker #启动并自启
systemctl status docker | awk '/Active/{print \$1,\$2,\$3}' #查看状态
docker --version #确认版本
"
done
[#####==========我说过这是分割线吗==========#####]
三、部署kubernetes
0.工具说明
- kubeadm: 引导启动k8s集群用的命令行工具,用户初始化cluster
- kubelet: 在集群中每台机器上都要运行的组件,负责管理pod、容器(containers)的声明周期等操作
- kubectl: k8s命令行集群管理工具,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
- kubernetes-cni: 上边三个工具的依赖包,上述工具对此软件版本有对应限制
1.安装kubeadm、kubelet、kubectl(所有节点)
for i in 192.168.4.{11..13}
do
ssh $i "yum -y install \
kubernetes-cni-0.6.0 \
kubelet-1.13.0 \
kubeadm-1.13.0 \
kubectl-1.13.0" &
done
2.启动kubelet(所有节点)
for i in 192.168.4.{11..13}
do
ssh $i "systemctl enable kubelet && systemctl start kubelet" & #没配置网络,kubelet可能启不来,不用管
done
3.部署master节点
3.1 master节点初始化
kubeadm init \ --kubernetes-version v1.13.0 \ --image-repository registry.aliyuncs.com/google_containers \ --apiserver-advertise-address=192.168.4.11 \ --pod-network-cidr=10.244.0.0/16
#kubeadm join... 注意记录此条命令,在配置node节点时会用到 #解释: #--kubernetes-version=v1.13.0,指定具体安装版本 #--image-repository,指定阿里云镜像下载,默认是k8s.gcr.io被墙 #--apiserver-advertise-address,指明用master的哪个interface与cluster的其它节点通信, ##若有多个interface,要明确指定。若不明确指定,kubeadm会选择默认网关的interface #--pod-network-cidr,指定pod网络的范围,此处使用flannel网络方案,必须设置成这个CIDR #若初始化失败,需要使用 kubeadm reset 命令进行清理,之后再执行初始化 #初始化过程说明: #[preflight] kubeadm 执行初始化前的检查。 #[kubelet-start] 生成kubelet的配置文件”/var/lib/kubelet/config.yaml” #[certificates] 生成相关的各种token和证书 #[kubeconfig] 生成 KubeConfig 文件,kubelet 需要这个文件与 Master 通信 #[control-plane] 安装 Master 组件,会从指定的 Registry 下载组件的 Docker 镜像。 #[bootstraptoken] 生成token记录下来,后边使用kubeadm join往集群中添加节点时会用到 #[addons] 安装附加组件 kube-proxy 和 kube-dns。 #Kubernetes Master 初始化成功,提示如何配置普通用户使用kubectl访问集群。 #提示如何安装 Pod 网络。 #提示如何注册其他节点到 Cluster。
3.2 配置kubectl
- 初始化后提示,推荐使用Linux普通用户执行kubectl
- kubectl默认会使用.kube目录下的授权信息访问k8s集群,避免每次使用kubectl都要声明环境变量
- 创建普通用户
useradd k8s && echo 123456 | passwd --stdin k8s
- 配置用户sudo权限,并配置sudo免密
sed -i "/^root/a k8s ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
- 保存集群安全配置文件到当前用户的.kube目录
su - k8s
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 启用kubectl自动命令补全功能
source <(kubectl completion bash)
#立即生效echo "source <(kubectl completion bash)" >> ~/.bashrc
#重登生效3.3 查看状态
kubectl get cs #查看集群组件状态,cs=componentstatuses=组件状态 #NAME STATUS MESSAGE ERROR #确认各组件处于healthy #scheduler Healthy ok #controller-manager Healthy ok #etcd-0 Healthy {"health": "true"} kubectl get nodes #查看节点状态 #NAME STATUS ROLES AGE VERSION #master NotReady master 44m v1.13.0 #master节点还未准备好 kubectl describe node master #查看节点详细信息 #master节点未准备好的原因是: # kubelet和kube-proxy未启动 kubectl get pods -n kube-system -o wide #查看本节点各个系统的pod状态 # -n=namespace # -o=
3.4 部署网络插件
- k8s集群工作必须安装pod网络,否则pod之间无法通信
- k8s支持多种网络方案,这里使用flannel
- 部署flannel
curl https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -O kubectl apply -f kube-flannel.yml kubectl get pod -n kube-system -o wide #查看pod状态 #需要一些时间,才能全部Running kubectl get nodes #查看节点状态 #master状态Ready
3.5 查看master下载的镜像
]$ sudo docker images | awk '{print $1,$2}' | column -t #REPOSITORY TAG #quay.io/coreos/flannel v0.11.0-amd64 #registry.aliyuncs.com/google_containers/kube-proxy v1.13.0 #registry.aliyuncs.com/google_containers/kube-scheduler v1.13.0 #registry.aliyuncs.com/google_containers/kube-apiserver v1.13.0 #registry.aliyuncs.com/google_containers/kube-controller-manager v1.13.0 #registry.aliyuncs.com/google_containers/coredns 1.2.6 #registry.aliyuncs.com/google_containers/etcd 3.2.24 #registry.aliyuncs.com/google_containers/pause 3.1
四、部署worker节点
- K8S的master节点比worker节点多运行了 kube-apiserver、kube-scheduler、kube-controller-manager 三个系统pod
4.1 将节点加入集群
- 执行master初始化后生成的 kubeadm join 命令
join=`kubeadm token create --print-join-command` #输出加入集群的命令
for i in 192.168.4.{12..13}
do
sudo ssh $i "
$join
"
done
4.2 查看状态
]# kubectl get nodes #查看节点状态,稍等一会儿
#NAME STATUS ROLES AGE VERSION
#master Ready master 90m v1.13.0
#node1 Ready <none> 79s v1.13.0
#node2 Ready <none> 77s v1.13.0
]# kubectl get pod --all-namespaces -o wide #查看所有节点pod状态
#所有节点Running
4.3 删除节点
- master执行删除节点
]# kubectl drain node2 --delete-local-data --force --ignore-daemonsets #删除node2节点
]# kubectl delete node node2
- node节点重置kubeadm,执行清理
]$ sudo ssh node2 "kubeadm reset"
4.4 将master设置为worker节点
- 出于安全考虑,默认配置下K8S不会将Pod调度到Master节点
]$ kubectl describe node master | grep Taints
#Taints: node-role.kubernetes.io/master:NoSchedule
- 使master成为worker
]$ kubectl taint node master主机名 node-role.kubernetes.io/master-
#node/master untainted
]$ kubectl describe node master | grep Taints
#Taints: <none>
- 恢复Master Only状态
]$ kubectl taint node master主机名 node-role.kubernetes.io/master=:NoSchedule
4.5 查看worker下载的镜像
]$ sudo ssh node1 "docker images | awk '{print \$1,\$2}' | column -t"
REPOSITORY TAG
quay.io/coreos/flannel v0.11.0-amd64
registry.aliyuncs.com/google_containers/kube-proxy v1.13.0
registry.aliyuncs.com/google_containers/pause 3.1
[#####==========我说过这是分割线吗==========#####]
五、#测试集群各组件
1 部署一个 Nginx Deployment,包含2个Pod
]# kubectl create deployment nginx --image=nginx:alpine
]# kubectl scale deployment nginx --replicas=2
2 验证Nginx Pod
]# kubectl get pods -l app=nginx -o wide
#nginx处于Running,并分配10.244.开头的集群内部ip
#NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
#nginx-54458cd494-s6r7v 1/1 Running 0 2m58s 10.244.2.2 node2 <none> <none>
#nginx-54458cd494-wrhkj 1/1 Running 0 3m4s 10.244.1.2 node1 <none> <none>
3 验证kube-proxy
- 以 NodePort 方式对外提供服务
]# kubectl expose deployment nginx --port=80 --type=NodePort #暴露随机端口给nginx80端口
- 查看nginx服务\
]# kubectl get services nginx
#NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
#nginx NodePort 10.101.85.192 <none> 80:30627/TCP 105s
- 在集群外部访问服务
]# curl 192.168.4.11:30627
4 验证dns、pod、network
- 运行busybox,并进入交互模式
]# kubectl run -it curl --image=radial/busyboxplus:curl
- 验证dns
]# nslookup nginx
#可以正确解析集群内的ip
- 验证kube-proxy,访问服务名
]# curl http://nginx/
- 验证Node网络通信,访问pod内网ip
]# curl 10.244.1.2
]# curl 10.244.2.2
[#####==========我说过这是分割线吗==========#####]
六、开启kube-proxy的ipvs
1.修改kube-system/kube-proxy中的mode
]# kubectl edit cm kube-proxy -n kube-system #cm=configmaps
:%s/mode: ""/mode: "ipvs"/
:wq
2.重启各个节点的kube-proxy pod
]# kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
]# kubectl get pod -n kube-system | grep kube-proxy
#kube-proxy-gftmx 1/1 Running 0 24s
#kube-proxy-kgc5w 1/1 Running 0 11s
#kube-proxy-ntr4p 1/1 Running 0 22s
3.查看日志
]# kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl logs " $1 " -n kube-system")}' | grep "Using"
#I0422 07:51:12.884170 1 server_others.go:189] Using ipvs Proxier. #已开启ipvs
[#####==========我说过这是分割线吗==========#####]
七、部署dashboard可视插件
- DashBoard,为用户提供一个可视化的web界面来查看当前集群的各种信息。
- dashboard可以部署容器化的应用、监控应用状态、执行故障排查任务、管理K8S各种资源。
1.部署证书,不然后面会因为证书过期而无法访问登陆https
1.1 生成私钥
]$ sudo mkdir -p /etc/kubernetes/certs
]$ cd /etc/kubernetes/certs
]$ sudo openssl genrsa -des3 -passout pass:x -out dashboard.pass.key 2048
]$ sudo openssl rsa -passin pass:x -in dashboard.pass.key -out dashboard.key
]$ sudo rm -rf dashboard.pass.key #删除刚才生成的dashboard.pass.key
1.2 生成证书签名请求文件csr
]$ sudo openssl req -new -key dashboard.key -out dashboard.csr #一路回车
1.3 生成SSL证书
]$ sudo openssl x509 -req -sha256 -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crt
1.4 创建dashboard的secret证书
]$ kubectl create secret generic kubernetes-dashboard-certs --from-file=/etc/kubernetes/certs -n kube-system
2.部署dashboard
2.1 下载kubernetes-dashboard.yaml文件
]# cd
]# curl https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.0/src/deploy/recommended/kubernetes-dashboard.yaml -O
2.2 修改配置文件(NodePort类型,token登陆)
- 改为国内仓库
]# sed -i -e "s/image:/#&/" -e "/image:/a \ image: registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.0" kubernetes-dashboard.yaml
- 使用刚生成的密钥认证(把Secret类注释掉)
]# let n=`awk '/Dashboard Secret/{print NR}' kubernetes-dashboard.yaml`+1
]# sed -i "$n,+10s/^/#/" kubernetes-dashboard.yaml
2.3 选择dashboard的访问方式:
1)使用NodePort方式访问
]# sed -i "/targetPort: /a \ type: NodePort" kubernetes-dashboard.yaml #使用NodePort类型
]# sed -i "/targetPort: /a \ nodePort: 32767" kubernetes-dashboard.yaml #映射给外部32767端口
2)API Server方式访问
- 生成client-certificate-data
]# grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
- 生成client-key-data
]# 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"
#输入证书密码 - 发送p12证书到访问dashboard的主机
]# scp kubecfg.p12 root@192.168.4.1:/root
- 访问机浏览器导入p12证书,需要输入证书密码
- 访问机重启浏览器
2.3 部署dashboard
]# kubectl create -f kubernetes-dashboard.yaml
2.4 创建dashboard登陆用户
- 在kube-system空间创建admin-user的服务帐号
- K8S创建集群时已经创建cluster-admin角色,直接将其绑定到admin-user帐号
]# curl https://gitee.com/xinsui1314x/k8s/raw/master/dashboard_admin-user.yaml -O
]# kubectl create -f dashboard_admin-user.yaml
- 查看admin-user帐号的token,登陆dashboard时会用到
]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
3.验证
- 查看pod状态
kubectl get pod --namespace=kube-system -o wide | grep dashboard
- Dashboard会在kube-system中创建Deployment和Service
kubectl get deployment kubernetes-dashboard --namespace=kube-system
kubectl get service kubernetes-dashboard --namespace=kube-system | grep dashboard
#kubernetes-dashboard NodePort 10.102.84.225 <none> 443:32767/TCP 18m - 访问web
- NodePort访问
]# firefox https://192.168.4.11:32767
#选择令牌(token)
#复制刚才的token进去,并登陆
- API Server访问
]# firefox https://192.168.4.11:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
#确认证书
#选择令牌(token)
#复制刚才的token进去,并登陆
所有评论(0)