主頁 >  其他 > Kubernetes + Dashboard 集群搭建

Kubernetes + Dashboard 集群搭建

2021-02-06 10:30:24 其他

1、環境說明

  • 基于kubeadm工具部署k8s 集群
    • (還有基于二進制的部署方式但是需要單獨部署k8s的每個組件比較繁瑣)
    • kubeadm是 Kubernetes官?提供的?于快速部署Kubernetes集群的?具
  • 基于Kubernetes v1.17.0 版本部署

2、搭建要求

  • k8s對于服務器的系統配置有一定要求

1、一臺或多臺運行著下列系統的機器:

  • Ubuntu 16.04+
  • Debian 9+
  • CentOS 7+
  • Red Hat Enterprise Linux (RHEL) 7+
  • Fedora 25+
  • HypriotOS v1.0.1+
  • Flatcar Container Linux (使用 2512.3.0 版本測驗通過)

2、每臺機器 2 GB 或更多的 RAM (如果少于這個數字將會影響你應用的運行記憶體)
3、 CPU為2核或更多
4、集群中的所有機器的網路彼此均能相互連接(公網和內網都可以),并且可以訪問外網
5、節點之中不可以有重復的主機名、MAC 地址或 product_uuid
6、開啟機器上的某些埠、請參見這里 了解更多詳細資訊,
7、禁用swap磁區,為了保證 kubelet 正常作業,你 必須 禁用交換磁區

3、集群規劃

服務器串列

主機角色IP
hadoop300Master192.168.2.100
hadoop301Node-1192.168.2.101
hadoop302Node-2192.168.2.102

每臺主機需安裝的組件

組件hadoop300(master)hadoop301hadoop302
kubeletVVV
DockerVVV
kubeadmVVV
kubectlVVV
  • Docker: 使用Docker作為Kubernetes的CRI(容器運行時)
    • tip: 聽說最新版本的k8s不在使用docker了
  • kubelet : 它運?在所有節點上,主要負責去啟動容器和 Pod
  • kubeadm: 一個簡化部署k8s的工具,部署后基本很少使用, 除非升級k8s
  • kubectl: k8s命令??具,通過它去與k8s對話, 管理k8s的各種資源.

4、架構

4.1 Kubernetes組件架構

在這里插入圖片描述

  • API服務器: 就是一個web服務, 對k8s各種資源(Pod,Service,RC) 的增刪改查, 也是集群內各個組件之間資料交換的中間人
  • etcd: 采用raft協議作為一致性演算法實作的分布式的key-value資料庫, 用于存盤資源資訊
  • Controller Manager: 應用集群管理者, 管理副本,節點,資源,命名空間,服務等. 如RC,RS
  • Scheduler: 負責把 Pod 調度到 Node 上,不過調度完以后就由 kubelet 來管理 Node 了,
  • kubelet: 處理Scheduler 的調度任務并且完成資源調度以后,kubelet 行程會在 APIServer 上注冊 Node 資訊,定期向 Master 匯報 Node 資訊, 同時管理 Pod 及 Pod 中的容器,
  • proxy: 實作service的通信與負載均衡機制, 負責為Pod創建代理服務,實作server到Pod的請求路由和轉發,從而實作K8s層級的虛擬轉發網路,

4.2 Kubernetes網路架構

  • 節點與節點通信通過物理網卡

  • 跨節點的Pod之間通信通過虛擬的網路層(比如Flannel或者Calico)

  • 同一節點的Pod之間通信通過docker虛擬網橋

  • Pod內部的容器間的通信通過共享網路空間Pause

  • 外網的通信通過Service層

在這里插入圖片描述

這里選擇的Flannel 網路方案, 具體架構為:

在這里插入圖片描述

  • Flannel是針對Kubernetes設計的一個網路規劃服務,是一種應用層網路, 覆寫網路, 通過在每個節點上部署一個flanneld行程去監聽一個埠的TCP資料包, 收到資料包后去對原始網路通信轉發協議再包了一層, 就像HTTP是在TCP之上再封裝一層資料包, 然后可以通過域名訪問.
  • 比如節點1的flanneld行程會監聽一個埠, 并且將收到來自節點1的Pod的資料后進行協議包裝, 然后根據協議轉發到節點2的Flanneld行程, 然后其再轉發給對應的Pod, 從而實作跨節點的Pod的通信.
  • etcd是一種key-value分布式資料庫, 維護所有docker網橋和其下的pod的所有ip地址的映射關系, 通過這個映射關系就可以知道最終要訪問的pod是在哪個主機下的哪個docker網橋下的哪個ip地址, 并且保證了所有node上flanned所看到的配置是一致的,同時每個node上的flanned監聽etcd上的資料變化,實時感知集群中node的變化,

4.3 部署應用的作業流程

  • 當運行 kubectl 命令時 通過向 Kubemetes API 服務器發送一個 HTTP 請求,在集群中創建一個新的 Replication Controller 物件 然后,ReplicationController 建了1 個新的pod ,調度器Scheduler將其調度到 一個作業節點上, Kubelet 看到 pod 被調度到節點上,就告知 Docker 從鏡像中心中拉取指定的鏡像,因為本地沒有該鏡像, 下載鏡像后, Docker會啟動運行該容器
    在這里插入圖片描述

5、安裝

假設你已經為集群每臺服務器安裝了docker, 配置了獨立主機名,靜態IP地址, 關閉了防火墻, 并且能互相免密登陸

5.1 前期準備

5.1.1、禁?SELINUX

  • linux的 SELINUX 主要作用就是最大限度地減小系統中服務行程可訪問的資源

每臺主機都要配置

  • 修改/etc/selinux/config 檔案, 修改如下:
SELINUX=disabled

或者直接執行下面👇命令

  • xcall 是可以同時在多臺服務器上呼叫一個命令
[root@hadoop300 ~]$ xcall "sed -i 's/\SELINUX=.*/SELINUX=disabled/' /etc/selinux/config"

5.1.2、關閉swap磁區

  • linux 的 swap也叫虛擬記憶體, 在物理記憶體不夠用時,作業系統會從物理記憶體中把部分暫時不被使用的資料轉移到交換磁區,從而為當前運行的程式留出足夠的物理記憶體空間. 但是k8s認為非常影響性能

每臺主機都要配置
修改 /etc/fstab 檔案, 修改如下:

# 注釋掉即可
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

重啟后查看swap狀態

[root@hadoop300 ~]# free -mh
              total        used        free      shared  buff/cache   available
Mem:           3.8G        815M        2.2G         10M        795M        2.8G
Swap:            0B          0B          0B

5.1.3、配置docker的 阿里云下載源(可選)

  • 在國內網路不好情況下, k8s拉取鏡像總是失敗導致應用部署失敗

每臺主機都要配置
修改/etc/docker/daemon.json 檔案, 修改如下

{
"registry-mirrors":["https://jccl15o4.mirror.aliyuncs.com"]
}

之后重啟docker配置

[root@hadoop300 tmp]# systemctl daemon-reload
[root@hadoop300 tmp]# systemctl restart docker

5.1.4、配置阿里云yum軟體源

創建/etc/yum.repos.d/kubrenetes.repo 檔案

[root@hadoop300 ~]$ 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

5.2 安裝kubeadm,kubelet和kubectl

  • 這些組件都在yum源可以下,直接yum安裝即可

每臺主機都要

[root@hadoop300 ~]$ yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0

設定 kubelet 為 開機啟動

[root@hadoop300 ~] systemctl enable kubelet
[root@hadoop300 ~] systemctl start kubelet

5.3 部署Master節點

  • 使用kubeadm工具初始化 k8s集群
    • 確保docker已啟動
    • 確保root用戶執行

5.3.1 初始化K8s集群

在hadoop300主機執行

[root@hadoop300 ~]$kubeadm init \
  --apiserver-advertise-address=192.168.2.100 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.17.0 \
  --pod-network-cidr=10.244.0.0/16 

[引數說明]

  • apiserver-advertise-address: 指定 API Server的IP地址
  • image-repository: 默認拉取鏡像地址k8s.gcr.io國內無法訪問,這里指定阿里云鏡像倉庫地址
  • kubernetes-version: 部署的k8s版本
  • pod-network-cidr: 指定Pod網路的IP地址范圍, 選用不同的網路方案值可能不同,這里選擇Flannel網路方案, 填寫10.244.0.0/16 即可

等待執行完成,把執行日志保存下載,后面會用到</mark

[root@hadoop300 hadoop]$ kubeadm init \
>   --apiserver-advertise-address=192.168.2.100 \
>   --image-repository registry.aliyuncs.com/google_containers \
>   --kubernetes-version v1.17.0 \
>   --pod-network-cidr=10.244.0.0/16 
[init] Using Kubernetes version: v1.17.0
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [hadoop300 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.2.100]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [hadoop300 localhost] and IPs [192.168.2.100 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [hadoop300 localhost] and IPs [192.168.2.100 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
manifests.go:214] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[control-plane] Creating static Pod manifest for "kube-scheduler"
W0125 01:09:06.409400  9705 manifests.go:214] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[apiclient] All control plane components are healthy after 34.503496 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config-1.17" in namespace kube-system with the configuration for the kubelets in the cluster
[mark-control-plane] Marking the node hadoop300 as control-plane by adding the label "node-role.kubernetes.io/master=''"
[mark-control-plane] Marking the node hadoop300 as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token] Using token: ycni4f.ru3eby1og6qasmzc
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane 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/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.2.100:6443 --token ycni4f.ru3eby1og6qasmzc \
    --discovery-token-ca-cert-hash sha256:d46b209f85303f3bffcdacd4ecc4f3856eb4198ce41c60f871f2c0a8d6ce162f 

5.3.2 配置kubectl工具

  • 初始化k8s集群后kubectl是不能使用的,需要配置一下
  • init日志可以看出需要把/etc/kubernetes/admin.conf 檔案配置成能全域訪問到即可, 可以自定配置到環境變數, 也可以按照init日志的方法進行存放
[root@hadoop300 ~]#mkdir -p $HOME/.kube # 此目錄主要保存一些k8s的配置快取之類
[root@hadoop300 ~]#sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@hadoop300 ~]#sudo chown $(id -u):$(id -g) $HOME/.kube/config # 屬主和屬組受給當前用戶

使用kubectl 查看 k8s節點的狀態

  • 因為還未構建扁平化的網路方案, 所以還是master節點還是NotReady狀態
[root@hadoop300 ~]$ kubectl get node
NAME        STATUS     ROLES    AGE   VERSION
hadoop300   NotReady   master   17m   v1.17.0

5.4 安裝網路插件Flannel

/proc/sys/net/bridge/bridge-nf-call-iptables 檔案設定為1(每臺服務器都要配置)

[root@hadoop300 ~]echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
  • 直接通過資源清單部署即可(master節點執行即可)
[root@hadoop300 ~]$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

之后等待一段時間后查看flannel的pod是否運行成功, 然后master節點就變為Ready狀態了

[root@hadoop300 ~]$ kubectl get pod  --all-namespaces
NAME                                READY   STATUS    RESTARTS   AGE
coredns-9d85f5447-2jq9g             1/1     Running   0          58m
coredns-9d85f5447-tlgbk             1/1     Running   0          58m
etcd-hadoop300                      1/1     Running   1          58m
kube-apiserver-hadoop300            1/1     Running   1          58m
kube-controller-manager-hadoop300   1/1     Running   1          58m
kube-flannel-ds-gqj6v               1/1     Running   0          22m
kube-proxy-w6f49                    1/1     Running   1          58m
kube-scheduler-hadoop300            1/1     Running   1          58m

# 查看節點狀態
[root@hadoop300 ~]$ kubectl get node
NAME        STATUS   ROLES    AGE   VERSION
hadoop300   Ready    master   60m   v1.17.0

5.5 slave節點加入集群

加入集群命令

  • kubeadm join --token <token> <master-ip>:<master-port> --discoverytoken-ca-cert-hash sha256:<hash>

token從上面的init日志中獲取, 如果未保存自行通過kubeadm工具獲取

如下將兩個節點hadoop301和hadoop302假如k8s集群

[hadoop@hadoop302 ~]$ kubeadm join 192.168.2.100:6443  \
    --token ycni4f.ru3eby1og6qasmzc \
    --discovery-token-ca-cert-hash sha256:d46b209f85303f3bffcdacd4ecc4f3856eb4198ce41c60f871f2c0a8d6ce162f
    
[hadoop@hadoop301 ~] # 同上

要等待一段時間, 因為slave節點拉取Flannel可能比較慢:
此時再查看3個節點的狀態都變為Ready了

[root@hadoop300 ~]$ kubectl get node -o wide
NAME        STATUS   ROLES    AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
hadoop300   Ready    master   88m   v1.17.0   192.168.2.100   <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   docker://1.13.1
hadoop301   Ready    <none>   13m   v1.17.0   192.168.2.101   <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   docker://1.13.1
hadoop302   Ready    <none>   17m   v1.17.0   192.168.2.102   <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   docker://1.13.1

6 測驗K8s 之 Helloworld

  • 發布應用到k8s集群中測驗效果

6.1 將應用打包成鏡像并推送

  • 這里使用的是springboot應用, 里面寫了一個介面 /user
  • 先準備好該應用的jar包

1、撰寫DrockerFile

FROM java:8
VOLUME /tmp
ADD test.jar test.jar
ENTRYPOINT ["nohup","java","-jar","/test.jar","&"]

2、然后打包成鏡像

[root@hadoop300 tmp]# pwd
/home/hadoop/tmp
[root@hadoop300 tmp]# ll
-rw-rw-r-- 1 hadoop hadoop       98 1月  31 21:01 Dockerfile
-rw-rw-r-- 1 hadoop hadoop 19329878 1月  31 21:00 test.jar
[root@hadoop300 tmp]# docker build -t springboot01 .
[root@hadoop300 tmp]# docker images
REPOSITORY      TAG       IMAGE ID         CREATED             SIZE
springboot01  latest     d04728534480      4 days ago         663 MB

3、推送到Docker Hub鏡像倉庫

  • 需要先注冊一個Docker Hub的賬號
[root@hadoop300 tmp]# docker login
[root@hadoop300 tmp]# docker push burukeyou/springboot01

進入官網,可以看到已經推送成功了
在這里插入圖片描述

6.2、撰寫Pod資源清單

vim demo.yaml

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod01			# pod名字
  namespace: default		# 所屬命名空間
  labels:
    demo: java				# 打標簽
    
spec:
  containers:
    - name: springboot01			# 容器名字
      image: burukeyou/springboot01	# 鏡像地址(剛才推送的)
      imagePullPolicy: IfNotPresent	# 是否優先從本地拉取鏡像,如果不存在再從遠程拉取
      ports:
        - containerPort: 8080   # 啟動埠

6.3 發布資源

  • 可以看到被部署到了hadoop302 節點,
  • 通過IP訪問 介面 /user 回傳字串 “user: {name: 30}”
[root@hadoop300 tmp]# kubectl create -f demo.yaml 
pod/demo-pod01 created
[root@hadoop300 tmp]# kubectl get pod -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP            NODE        
demo-pod01   1/1     Running   0         42s   10.244.1.20   hadoop302   
[root@hadoop300 tmp]# curl http://10.244.1.20:8080/user
user: {name: 30}

7、Dashboard 部署(可選)

  • 一個k8s集群管理的可視化網頁
  • 本質也是作為一個應用部署到k8s集群, 所以也是通過資源清單發布

7.1 通過資源清單部署

1、先把資源清單下載下來并修改

[root@hadoop300 tmp]$ wget http://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
[root@hadoop300 tmp]# vim recommended.yaml

2、然后修改Service型別為NodePort便于外網訪問

# ------------------- Dashboard Service ------------------- #

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort			# 修改為NodePort型別的Service
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30443		# dashboard網頁的訪問埠(自定義)
  selector:
    k8s-app: kubernetes-dashboard

部署dashboard

[root@hadoop300 tmp]# kubectl create -f recommended.yaml

7.2 啟動效果查看

查看 Dashboard的 Pod 和 services 是否啟動成功

[root@hadoop300 ~]# kubectl get pods --all-namespaces 
NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE
kubernetes-dashboard   dashboard-metrics-scraper-76585494d8-mclvf   1/1     Running   0          7s
kubernetes-dashboard   kubernetes-dashboard-5996555fd8-2xn6c        1/1     Running   0          8s


[root@hadoop300 ~]# kubectl get services --all-namespaces 
NAMESPACE              NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.96.115.150   <none>        8000/TCP                 41s
kubernetes-dashboard   kubernetes-dashboard        NodePort    10.96.54.85     <none>        443:30443/TCP            42s

然后通過瀏覽器訪問, 訪問地址為: https://k8s任意節點的IP:30443/

在這里插入圖片描述

發現要登陸, 提供了兩種方式,這里采用token登陸, 先創建一個用戶去登陸

7.3 創建管理用戶

1、撰寫創建管理員并且系結角色的資源清單 vim create-admin.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: hadoop	#  自定義用戶名
  namespace: kubernetes-dashboard

---
# 給用戶 hadoop 系結角色
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: hadoop # 同上
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: hadoop	#  同上
  namespace: kubernetes-dashboard

發布

[root@hadoop300 tmp]# kubectl apply -f create-admin.yaml

獲取Token

# 查看所有 serviceaccount 和 secrets
[root@hadoop300 tmp]# kubectl get sa,secrets -n kubernetes-dashboard
NAME                                  SECRETS   AGE
serviceaccount/default                1         61m
serviceaccount/hadoop                 1         31s
serviceaccount/kubernetes-dashboard   1         61m

NAME                                      TYPE                                  DATA   AGE
secret/default-token-wdt66                kubernetes.io/service-account-token   3      61m
secret/hadoop-token-6g859                 kubernetes.io/service-account-token   3      31s
secret/kubernetes-dashboard-certs         Opaque                                0      61m
secret/kubernetes-dashboard-csrf          Opaque                                1      61m
secret/kubernetes-dashboard-key-holder    Opaque                                2      61m
secret/kubernetes-dashboard-token-7thdm   kubernetes.io/service-account-token   3      61m

# 查看 hadoop用戶的secret的Token
[root@hadoop300 tmp]#  kubectl describe secret hadoop-token-6g859 -n kubernetes-dashboard
Name:         hadoop-token-6g859
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: hadoop
              kubernetes.io/service-account.uid: 6a63be78-5de6-4892-8123-6a66378df504

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IjFNQzA0QXZhdXJTeUtVSHhPQ3pldkZ6NWdRM285cTlPUjdYTXoxWjJ1Q00ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJoYWRvb3AtdG9rZW4tNmc4NTkiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiaGFkb29wIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNmE2M2JlNzgtNWRlNi00ODkyLTgxMjMtNmE2NjM3OGRmNTA0Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmhhZG9vcCJ9.wr7g1CmIrgv9Jj-Ap1leow8zefIzotzS4LE_qO5VNziVqEcnhCYzP2q6GnkUYR4CJt7YtEBqF6OLvlB5mHBPmFtHgtp-LiFUujScKgDdx8jdTBcVmeb39Fw_knjBuSLBOd3fqdvXumBajlwKpDQL_gYnkhc7bxn5FICYfalf1PF3AoPq8WjR2VoCDnGBB1qeaT87e6xnflScx3l6NNSEN3Bl8Ymt8WJRi4Ch0nhUZPLAXZxgO3kt1-TWHo5wASYiMW4Xwb-kPv6yAgoNTm9h6jgGqimf2InEW9rGLbnRAR0O9ZelFI6G4bE5sXtdNL_YdaVTRcmUYUKusaMpEADquQ

快捷獲取Token命令

kubectl describe secret $(kubectl get secrets -n kubernetes-dashboard | grep hadoop | awk '{print $1}') -n kubernetes-dashboard | grep token:

然后拿著token去登陸即可

在這里插入圖片描述

問題

Dashboard在瀏覽器打不開問題

三種方法:
1、可通過火狐瀏覽器強行打開

2、如果用chrome瀏覽器chrome瀏覽器提示不安全打不開, 在當前頁面用鍵盤輸入 thisisunsafe, 不是在地址欄輸入,是直接敲鍵盤

3、重新部署Dashboard, 關閉安全驗證

a)卸載Dashboard應用

[root@hadoop300 tmp]# kubectl delete -f recommended.yaml

修改資源清單recommended.yaml 把Secret 注釋掉不創建

# ------------------- Dashboard Secret------------------- #
#apiVersion: v1
#kind: Secret
#metadata:
#  labels:
#    k8s-app: kubernetes-dashboard
#  name: kubernetes-dashboard-certs
#  namespace: kubernetes-dashboard
#type: Opaque

然后再部署dashboard

[root@hadoop300 tmp]# kubectl create -f recommended.yaml

然后自己生成 之前注釋掉的secret 即 kubernetes-dashboard-certs

# 生成dashboard.key 檔案
[root@hadoop300 cert]# openssl genrsa -out dashboard.key 2048
[root@hadoop300 cert]# ll
-rw-r--r-- 1 root root 1675 2月   4 02:27 dashboard.key
# 生成dashboard.csr 檔案
[root@hadoop300 cert]# openssl req -days 36000   -new -out dashboard.csr    -key 
[root@hadoop300 cert]# ll
-rw-r--r-- 1 root root  903 2月   4 02:28 dashboard.csr
-rw-r--r-- 1 root root 1675 2月   4 02:27 dashboard.key
# 生成自簽證書
[root@hadoop300 cert]# openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt
# 使用自簽證書創建secret, 創建名為  kubernetes-dashboard-certs的 generic secret 它包含兩個條目
# dashboard.key 和 dashboard.crt
[root@hadoop300 cert] kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt  -n kubernetes-dashboard

# 查看 該secrets 是否創建成功
[root@hadoop300 cert]# kubectl get sa,secrets -n kubernetes-dashboard
NAME                                  SECRETS   AGE
serviceaccount/default                1         23h
serviceaccount/kubernetes-dashboard   1         23h

NAME                                      TYPE                                  DATA   AGE
secret/default-token-92k64                kubernetes.io/service-account-token   3      23h
secret/kubernetes-dashboard-certs         Opaque                                2      23h
secret/kubernetes-dashboard-csrf          Opaque                                1      23h
secret/kubernetes-dashboard-key-holder    Opaque                                2      23h
secret/kubernetes-dashboard-token-lcxrm   kubernetes.io/service-account-token   3      23h

10、打賞

如果覺得文章有用,你可鼓勵下作者(支付寶)

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/257065.html

標籤:其他

上一篇:2021美賽翻譯D題

下一篇:編輯安裝MySQL

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more