接触kubernetes两年有余,从18年初加入kubernetes社区来算,已经一年半,或许是时候写点什么。简单文章如何写好,难点文章如何写透,或许是一种学问,打算推一个系列:《Kubernetes GO》算是对这两年的一个总结。
kubernetes 1.16已在前天正式发布.
kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,其中kubespray比较适合较大规模的集群部署,*步骤,为可选操作,该文章主要介绍,以下内容:
下面我们看看如何编译及部署,在使用kubeadm部署前,需要编译以下镜像及执行文件,下面我们以v1.17.0-alpha.0版本为例:
1.17a
获取下面的基础镜像
其中prepare.tgz为编译基础镜像,117alpha.tgz为v1.17.0-alpha.0所需镜像及二进制文件golang 1.12.9+
ip、iptables、ipset、mount、nsenter、ebtables、ethtool, socat, tc、touch、conntrack、ipvsadm、jq、sysstat、curl、libseccomp
等命令行9月18日,Kubernetes 1.16正式发布,其包含31项增强功能,其中8项增强功能已经GA,另有8项增强功能处于beta阶段,15项处于alpha阶段,该版本有以下亮点:
若只需要部署v1.17.0-alpha.0版本,可跳过编译过程。
社区的文档介绍了如果编译相关镜像等工作,如果有兴趣,可仔细阅读,确认golang版本go version
>= 1.12.9:
目前基础镜像为k8s.gcr.io/kube-cross:v1.12.9-1
,如果需要确认读者目前所需镜像,在执行KUBE_GIT_VERSION=v1.17.0-alpha.0 KUBE_FASTBUILD=true KUBE_BUILD_PULL_LATEST_IMAGES=n make release-images
时需要,若本地不存在该镜像,会出现报错,因某种不可抗力因数,需要使用代理进行镜像拉取
https://gcr.azk8s.cn
国内无法直接获取 gcr.io/*
镜像,我们可以将 gcr.io/<repo-name>/<image-name>:<version>
替换为 gcr.azk8s.cn/<repo-name>/<image-name>:<version>
,例如
# $ docker pull k8s.gcr.io/kube-cross:v1.12.9-1
# k8s.gcr.io可以转换为gcr.io/google_containers
$ docker pull gcr.azk8s.cn/google_containers/kube-cross:v1.12.9-1
$ docker tag gcr.azk8s.cn/google_containers/kube-cross:v1.12.9-1 k8s.gcr.io/kube-cross:v1.12.9-1
下面切换到$GOPATH/src/k8s.io目录,如无则创建,执行git clone https://github.com/kubernetes/kubernetes
,
下载完成后,切换到该目录,执行以下操作
通过右侧公众号获取的下载链接,解压prepare.tgz
,解压加载以下面的基础镜像
tar -zxvf prepare.tgz
# docker load -i 解压的tar包,最终得到下列镜像
k8s.gcr.io/kube-cross v1.12.9-1 a808db72440c 5 weeks ago 1.87GB
k8s.gcr.io/debian-iptables-amd64 v11.0.2 01a746008995 5 months ago 45.4MB
k8s.gcr.io/debian-base-amd64 v1.0.0 204e96332c91 5 months ago 42.3MB
k8s.gcr.io/debian-hyperkube-base-amd64 v0.12.1 a46476511725 7 months ago 393MB
bash --version
> 4.3,否则出现以下问题/root/go/src/k8s.io/kubernetes/build/lib/release.sh:行385: docker_build_opts[@]: 为绑定变量
/root/go/src/k8s.io/kubernetes/build/lib/release.sh:行385: docker_build_opts[@]: 为绑定变量
/root/go/src/k8s.io/kubernetes/build/lib/release.sh:行385: docker_build_opts[@]: 为绑定变量
/root/go/src/k8s.io/kubernetes/build/lib/release.sh:行385: docker_build_opts[@]: 为绑定变量
若不打算更新bash,则做以下修改:
git diff build/lib/release.sh
diff --git a/build/lib/release.sh b/build/lib/release.sh
index 73c0bcc..e7bd1b1 100644
--- a/build/lib/release.sh
+++ b/build/lib/release.sh
@@ -382,7 +382,7 @@ EOF
if [[ "${KUBE_BUILD_PULL_LATEST_IMAGES}" =~ [yY] ]]; then
docker_build_opts+=("--pull")
fi
- "${DOCKER[@]}" build "${docker_build_opts[@]}" -q -t "${docker_image_tag}" "${docker_build_path}" >/dev/null
+ "${DOCKER[@]}" build -q -t "${docker_image_tag}" "${docker_build_path}" >/dev/null
修改完记得提交,若编译前,对代码有改动,且未提交,即未执行git commit
操作,执行编译KUBE_GIT_VERSION=v1.17.0-alpha.0 KUBE_FASTBUILD=true KUBE_BUILD_PULL_LATEST_IMAGES=n make release-images
,则生成的镜像即版本为dirty版本,其他编译操作参见下面链接:
若编译前,对代码有改动,且未提交,即未执行git commit
操作,则生成的镜像即版本为dirty版本,执行下述命令(可执行bash -x):
最终生成以下镜像结果
ls _output/release-images/amd64/
conformance-amd64.tar kube-apiserver.tar kube-proxy.tar
hyperkube-amd64.tar kube-controller-manager.tar kube-scheduler.tar
下面为二进制执行文件
ls _output/dockerized/bin/linux/amd64/
apiextensions-apiserver e2e.test genyaml hyperkube kubelet mounter
conversion-gen gendocs ginkgo kubeadm kubemark openapi-gen
deepcopy-gen genkubedocs go2make kube-apiserver kube-proxy
defaulter-gen genman go-bindata kube-controller-manager kube-scheduler
e2e_node.test genswaggertypedocs go-runner kubectl linkcheck
# 将kubelet、kubeadm、kubectl拷贝到/usr/bin/目录。
下述表单为kubeadm及kubernetes维护时限
功能 | 成熟程度 |
---|---|
命令行用户体验 | beta |
功能实现 | beta |
配置文件 API | alpha |
自托管 | alpha |
kubeadm alpha 子命令 | alpha |
CoreDNS | GA |
动态 Kubelet 配置 | alpha |
Kubernetes 发现版本的通常只维护支持九个月,在维护周期内,如果发现有比较重大的 bug 或者安全问题的话,
可能会发布一个补丁版本。下面是 Kubernetes 的发布和维护周期,同时也适用于 kubeadm
。
Kubernetes 版本 | 发行月份 | 终止维护月份 |
---|---|---|
v1.10.x | 2018 年 3 月 | 2018 年 12 月 |
v1.11.x | 2018 年 6 月 | 2019 年 3 月 |
v1.12.x | 2018 年 9 月 | 2019 年 6 月 |
v1.13.x | 2018 年 12 月 | 2019 年 9 月 |
v1.14.x | 2019 年 3 月 | 2019 年 12 月 |
v1.15.x | 2019 年 6 月 | 2020 年 3 月 |
v1.16.x | 2019 年 9 月 | 2020 年 6 月 |
在安装之前,需要做一些设置处理,当前准备两台CentOS 7.x如下所示:
// 输入代码内容
cat /etc/hosts
10.142.21.132 kargo
10.142.114.189 paasn1
下面需要对各主机进行安装前检查
简单起见,可以关闭所有节点的防火墙:
systemctl stop firewalld
systemctl disable firewalld
# 临时禁用selinux
setenforce 0
# 永久禁用selinux
vi /etc/selinux/config
SELINUX=disabled
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf
确认br_netfilter模块
lsmod | grep br_netfilter
启用此内核模块,以便遍历桥的数据包由iptables进行处理以进行过滤和端口转发,并且群集中的kubernetes窗格可以相互通信
modprobe br_netfilter
安装依赖命令行
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp socat -y
若kube-proxy需要开启ipvs,则下述模块需要存在
可选:
若kube-proxy需要开启ipvs,则下述模块需要存在, 在所有的Kubernetes节点kargo和paasn1上执行以下脚本
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip\_vs
modprobe -- ip\_vs\_rr
modprobe -- ip\_vs\_wrr
modprobe -- ip\_vs\_sh
modprobe -- nf\_conntrack\_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip\_vs -e nf\_conntrack\_ipv4
# 临时禁用swap即可,重启后,需要再此执行,当然也可以把磁盘信息写入/etc/fstab
swapoff -a
从docker官方库安装kubernetes最新兼容性测试的匹配版本,Kubernetes 1.16+支持的docker版本列表依然是1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09
安装docker-ce的软件包依赖,当前安装18.09.7:
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 18.09.7
yum install docker-ce docker-ce-cli containerd.io -y
# 通过yum list docker-ce --showduplicates | sort -r 获取版本信息,执行以下命令安装指定版本
# yum install docker-ce-<VERSION\_STRING> docker-ce-cli-<VERSION\_STRING> containerd.i
对于使用systemd作为的Linux的发行版,使用systemd作为docker的cgroup-river
可以确保服务器节点在资源紧张的情况更加稳定,因此这里修改各节点上docker的cgroup-driver为systemd。
创建/etc/docker/daemon.json
{
"exec-opts": "native.cgroupdriver=systemd"
}
重启docker服务
systemctl restart docker
docker info | grep Cgroup
Cgroup Driver: systemd
systemctl enable docker
以下为kubernetes 1.16+软件版本依赖信息:
执行kubeadm config images list
获取镜像版本信息
软件 | 版本或镜像 |
---|---|
apiserver | k8s.gcr.io/kube-apiserver:v1.17.0-alpha.0 |
controller-manager | k8s.gcr.io/kube-controller-manager:v1.17.0-alpha.0 |
scheduler | k8s.gcr.io/kube-scheduler:v1.17.0-alpha.0 |
proxy | k8s.gcr.io/kube-proxy:v1.17.0-alpha.0 |
pause | k8s.gcr.io/pause:3.1 |
etcd | k8s.gcr.io/etcd:3.3.15-0 |
coredns | k8s.gcr.io/coredns:1.6.2 |
同样kubernetes-cni-0.7.5-0.x86_64也需要安装
所有节点执行以下操作:
tar -xzvf 117alpha.tgz -C /root/
,切换至/root/
目录
执行rpm -ivh *.rpm
cat <<EOF >/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET\_KUBECONFIG\_ARGS=--v=6 --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET\_CONFIG\_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET\_KUBEADM\_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET\_EXTRA\_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET\_KUBECONFIG\_ARGS $KUBELET\_CONFIG\_ARGS $KUBELET\_KUBEADM\_ARGS $KUBELET\_EXTRA\_ARGS
EOF
cat <<EOF >/etc/systemd/system/kubelet.service
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=[http://kubernetes.io/docs/](http://kubernetes.io/docs/)
[Service]
ExecStart=/usr/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
# enable kubelet服务
systemctl daemon-reloads
systemctl enable kubelet.service
使用kubeadm config print init-defaults
可以打印集群初始化默认的使用的配置:
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:undefinedapiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
scheduler: {}
其中镜像地址可通过imageRepository参数进行自定义,若本地已加载所需镜像,则无须改变,根据测试环境的实际情况,kubernetesVersion对应`kubeadm version`中GitVersion版本,将kubeadm.conf修改为:
cat <<EOF >/root/kubeadm.conf
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 10.142.21.132
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: kargo
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.17.0-alpha.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
scheduler: {}
EOF
接下来使用kubeadm初始化集群,选择kargo作为Master Node,在kargo上执行下面的命令:
kubeadm init --config /root/kubeadm.conf
该命令会生成以下内容:访问集群`mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf /root/.kube/config`
关于kubernetes的接入说明,具体可参看[集群接入](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)验证集群查看一下集群状态,确认个组件都处于healthy状态:
kubectl cluster-info
Kubernetes master is running at https://10.233.0.1
CoreDNS is running at https://10.233.0.1/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 1.2.3.4
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: kargo
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true"}
若有详细了解kubeadm join
命令的需求,可参看kubeadm join
加入集群,需要提供CA密钥的哈希,格式:sha256:<hex_encoded_hash>,在成功kubeadm init
后,输出结果会显示合适的join命令,当然可以如下自己生成,
# 生成token
kubeadm token create
a9trii.8d52xbbusol0glji
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.\* //'
31b110e7fea9c86ddc6c1caa9f27f39021ea115ab7d2b5a86e157c42d9c8c57c
kubeadm join --discovery-token 9trii.8d52xbbusol0glji --discovery-token-ca-cert-hash sha256:31b110e7fea9c86ddc6c1caa9f27f39021ea115ab7d2b5a86e157c42d9c8c57c 10.142.21.132:6443 -v=6
paasn1加入集群成功后,在kargo节点上执行命令查看集群中的节点:
kubectl get node
NAME STATUS ROLES AGE VERSION
kargo Ready master 57m v1.17.0-alpha.0
passn1 Ready <none> 11s v1.17.0-alpha.0
如果配置正确,那么上述命令执行结果应该是任何输出的。如果结果有错,请参照上述配置和环境变量文件检查配置。一旦我们顺利启动etcd
服务,我们还需要正确检查我们的etcd
集群是否可用,在etcd
集群中任一节点中执行以下命令:
docker ps|grep etcd
0214f9a78ba5 b2756210eeab "etcd --advertise-cl…" 4 hours ago Up 4 hours k8s\_etcd\_etcd-kargo\_kube-system\_2b66f634d9a00ad56540109b231dd318\_3
20419a0de748 k8s.gcr.io/pause:3.1 "/pause" 9 days ago Up 1 days k8s\_POD\_etcd-kargo\_kube-system\_2b66f634d9a00ad56540109b231dd318\_2
docker exec -it 168729f100e0 etcdctl --endpoint https://127.0.0.1:2379 \
--endpoint https://127.0.0.1:2379 \
--ca-file=/etc/ssl/etcd/ssl/ca.pem \
--cert-file=/etc/ssl/etcd/ssl/ca.pem \
--key-file=/etc/ssl/etcd/ssl/ca-key.pem \
cluster-health
member 38ee253c41f760ca is healthy: got healthy result from https://10.142.21.132:2379
cluster is healthy
集群初始化如果遇到问题,可以使用下面的命令进行清理
kubeadm reset
rm -rf /var/lib/cni/ /var/lib/etcd/
rm -rf /var/lib/kubelet /etc/kubernetes/
接下来,选择calico作为网络插件,具体说明,参见相关文档网络插件
其中calico部署简单如下所述:
POD\_CIDR="<your-pod-cidr>" \
sed -i -e "s?192.168.0.0/16?$POD\_CIDR?g" calico.yaml
相关文档,参见calico部署
kubectl apply -f calico.yaml
首先,确认calico及coredns相关pod是否运行正确
在一切正常情况下,你会得到类似如下的输出结果:
#kubectl get po -n kube-system|grep calico
calico-kube-controllers-744795b577-jc4r7 1/1 Running 0 1d
calico-node-7lbdm 1/1 Running 8 1d
#kubectl get po -n kube-system|grep dns
coredns-7f547f9899-7l9cq 1/1 Running 0 1d
dns-autoscaler-7bf66d8bd8-l52bn 1/1 Running 0 1d
kubectl run busybox --image=busybox:latest --restart=Never
进入busybox执行nslookup,查询kubernetes服务地址:
kubectl run -it busybox sh
nslookup kubernetes.default
Server: 10.233.0.3
Address 1: 10.233.0.3 kube-dns.kube-system.svc.cluster.local
Name: kubernetes.default
Address 1: 10.233.0.3 kubernetes.default.svc.cluster.local
ping 10.142.21.132
若ping通,则网络正常
为了更好的管理与使用kubernetes集群,开源社区提供了多种工具,如应用管理、监控、日志、负载均衡等,另外kubernetes提供两种扩展方式:使用聚合层与第三方资源管理
Helm工具由Deis发起,该公司在17年初收购,该软件由客户端命helm令行工具和服务端tiller组成,Helm的安装十分简单。 下载helm命令行工具到master节点node1的/usr/local/bin下,这里下载的2.14.3版本:
curl -O [https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz](https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz)
tar -zxvf helm-v2.14.3-linux-amd64.tar.gz
cd linux-amd64/
cp helm /usr/local/bin/
软件包的管理理念并不是Deis,这里势必需要提及一下mesosphere,其开创软件包c/s管理模式,可惜在mesos vs kubernetes的战争中落败,而失去初始的光芒。
为了安装服务端tiller,需要在主机配置kubectl工具和kubeconfig文件,确保kubectl工具可以在这台机器上访问apiserver且正常使用。 这里的kargo节点已经配置好了kubectl。
因为Kubernetes APIServer开启了RBAC访问控制,所以需要创建tiller使用的service account: tiller并分配合适的角色给它。 详细内容可以查看helm文档中的RBAC。 这里简单起见直接分配cluster-admin这个集群内置的ClusterRole给它。创建helm-rbac.yaml文件:
cat <<EOF >/root/helm.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
EOF
kubectl apply -f /root/helm.yaml
接下来部署tiller:
helm init --service-account tiller --skip-refresh
tiller默认被部署在k8s集群中的kube-system这个namespace下:
kubectl get pod -n kube-system -l app=helm
NAME READY STATUS RESTARTS AGE
tiller-deploy-7d666f8ccc-92h27 1/1 Running 5 1d
如上所述,使用代理镜像库
helm init --service-account tiller --tiller-image <你指定的镜像库名称>/tiller:v2.13.3 --skip-refresh
实际如下:
helm init --service-account tiller --tiller-image gcr.azk8s.cn/google\_containers/tiller:v2.13.1 --skip-refresh
修改helm charts仓库地址为微软提供的镜像地址:
helm repo add stable [http://mirror.azure.cn/kubernetes/charts](http://mirror.azure.cn/kubernetes/charts)
"stable" has been added to your repositories
helm repo list
NAME URL
stable [http://mirror.azure.cn/kubernetes/charts](http://mirror.azure.cn/kubernetes/charts)
local http://127.0.0.1:8879/charts
kubernetes使用metrics-server提供节点及pod级别的资源监控, 其为metrics.k8s.io
接口组,为弹性伸缩模块等模块提供接口,具体详见kubernetes监控架构
git clone https://github.com/kubernetes-incubator/metrics-server
deploy/1.8+/metrics-server-deployment.yaml
文件---
apiVersion: v1
kind: ServiceAccount
metadata:
name: metrics-server
namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: metrics-server
namespace: kube-system
labels:
k8s-app: metrics-server
spec:
selector:
matchLabels:
k8s-app: metrics-server
template:
metadata:
name: metrics-server
labels:
k8s-app: metrics-server
spec:
serviceAccountName: metrics-server
volumes:
# mount in tmp so we can safely use from-scratch images and/or read-only containers
- name: tmp-dir
emptyDir: {}
containers:
- name: metrics-server
image: k8s.gcr.io/metrics-server-amd64:v0.3.4
imagePullPolicy: Always
args:
- --logtostderr
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
volumeMounts:
- name: tmp-dir
mountPath: /tmp
kubectl get po -n kube-system -l k8s-app=metrics-server
NAME READY STATUS RESTARTS AGE
metrics-server-66fc8cddfb-cwvcf 1/1 Running 6 1d
kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
kargo 1533m 19% 9430Mi 61%
paasn1 4443m 56% 10490Mi 67%
社区提供Dashboard项目,它为用户提供一个可视化的Web界面来查看当前集群的各种信息。用户可以使用Kubernetes Dashboard部署容器化的应用、监控应用的状态、执行故障排查任务以及管理Kubernetes各类资源。部署方式如下;
https://github.com/kubernetes/dashboard
aio/deploy/recommended/02_dashboard-service.yaml
配置修改为:kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
type: NodePort
获取分配访问端口:
kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard NodePort 10.233.41.73 <none> 443:30479/TCP 1d获得主机端口30479,dashboard的界面绕过https,通过https://10.142.21.132:30479nodeport方式进行访问外,还可以执行以下代理操作kubectl proxy --accept-hosts='^.*' --address='10.142.113.20' --port 8080
我们还可以通过http://10.142.21.132:8080/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/,如下图所示。
针对上述涉及的内容,请关注后续文章
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。