ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【Kubernetes k8s】Ubuntu-22.04搭建 k8s-1.30.1集群,开启Dashboard-2.7.0 [打印本页]

作者: 北冰洋以北    时间: 2024-8-1 21:52
标题: 【Kubernetes k8s】Ubuntu-22.04搭建 k8s-1.30.1集群,开启Dashboard-2.7.0
Ubuntu-22.04搭建 k8s-1.30.1集群,开启Dashboard-v2.7.0(以及Token不天生的问题)、摆设ingress-nginx-1.10.1

弁言

   最近在研究分布式计算,想将分布式计算都容器化,使用 k8s 来调理,以是从0开始学 k8s ,这是我遇到坑后百度、查资料一点一点总结的搭建过程,贴在这方便以后本身找,也希望对你能有所帮助,后续有问题我会更新这篇博客的内容
    *** 特殊留意:当 k8s 集群 init 了以后的 kubectl 下令最好都等上一步的下令执行完了再举行下一步操作,不要抢着执行,随时看 Pod 的状态 kubectl get pods -A
,只要还有一个没有 Running 就不要着急下一步
  一、系统环境准备

   用 Ubuntu-22.04 版本,CentOS 操作核心是一样的,只是下令差别罢了
  1、关闭 swap

   官方要求关闭swap,假造内存相干,因为 Kubernetes 无法读取假造内存相干的数据,开启这个可能会导致 Kubernetes 的内存问题
    要想永久关,得先清除程序占用,暂时关闭 swap:
  1. swapoff -a
复制代码
  修改配置文件永久关闭,注释这个文件:
  1. vi /etc/fstab
复制代码
  中的关于 swap 的那一行,如图,注释掉它:
  

2、关闭 SELinux

   Ubuntu 没有这个东西可以不管,CentOS 执行:
  1. sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
复制代码
  然后重启系统即可。SELinux 是系统安全方面的,如果你懂怎么弄可以本身配置 SELinux 就不用关,很贫苦,以是各人根本都关了的
  3、关闭防火墙

   需要关闭防火墙,因为节点之间要相互通讯,开防火墙容易出问题
  1. ufw disable
  2. # 或者
  3. systemctl disable --now ufw
复制代码
4、设置时区(根据本身的时间环境可选)

   因为关系到集群呆板之间的通讯,需要一个时间同步各人的行为。设置为上海时区
  1. timedatectl set-timezone Asia/Shanghai
复制代码
  重启时间同步服务
  1. systemctl restart systemd-timesyncd.service
复制代码
  看一下时间对不对:
  1. timedatectl status
  2. # 或者
  3. date
复制代码
5、修改 /etc/hosts 、/etc/hostname

   这个是为了后面填地点的时候方便以及 Kubernetes 要识别主机名
    修改 hosts 文件,将本身的IP地点和主机名填进去:
  1. echo "192.168.10.10 k8s-master" | sudo tee -a /etc/hosts
复制代码
  其他节点的你想填也填进去
    修改 hostsname 文件,两种办法,一种是 hostnamectl 下令,一种是直接修改文件,修改文件的方式:
  1. echo "k8s-master" | sudo tee /etc/hostname
复制代码
  修改完主机名文件后最好重启一次ssh终端或系统
  6、开启流量转发

   开这个的原因是让各个主机负担起网络路由的脚色,因为后续还要安装网络插件,要有一个路由器各个 Pod 才气相互通讯。开 IPv4 ,跟着抄就行,我也是抄的:
  1. cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
  2. overlay
  3. br_netfilter
  4. EOF
  5. sudo modprobe overlay
  6. sudo modprobe br_netfilter
  7. cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
  8. net.bridge.bridge-nf-call-iptables  = 1
  9. net.bridge.bridge-nf-call-ip6tables = 1
  10. net.ipv4.ip_forward                 = 1
  11. EOF
  12. sudo sysctl --system
  13. sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
复制代码
二、安装 containerd 运行时环境

   Kubernetes-1.24 版本移除了 dockershim 的支持,以是之前的先安装 docker 再安装 Kubernets 的方式已经不可行了,可能会导致 Kubelet 报错退出,以是我们要先安装 containerd 运行时环境。这时可能就有人问了,安装 Docker 时不是带有 containerd 了吗,你说得对,安装 Docker 时确实是 apt install -y docker-ce docker-ce-cli containerd.io ,确实安装了 containerd ,但是这是 Docker 的 containerd 啊,这么安装的 containerd 是由 Docker 管理的,k8s 无法管理,以是就会导致报错,踩过的坑啊。
  1、下载安装

   *** 如果使用 k8s 1.24版本以上,那么 containerd 一定要单独安装,不要想着安装 Docker 了会自带,k8s 启动会报错
去 GitHub 上下载二进制包,想要其他版本的话替换两处 1.7.17 为你想要的版本即可:
  1. curl -O https://github.com/containerd/containerd/releases/download/v1.7.17/cri-containerd-cni-1.7.17-linux-amd64.tar.gz
复制代码
  解压到根目录:
  1. tar -zxvf cri-containerd-cni-1.7.17-linux-amd64.tar.gz -C /
复制代码
  启动 containerd 并且开机自启:
  1. sudo systemctl start containerd
  2. sudo systemctl enable containerd
复制代码
  执行看版本正不正常:
  1. containerd -v
复制代码

2、天生配置文件(紧张)

   因为我们是用二进制包直接解压的,以是要手动天生配置文件,很紧张,没有这个配置文件的话,你会发现整个 kubelet 在无限重启,因为 etcd 起不来,导致其他容器都在重启。执行:
  1. sudo mkdir -p /etc/containerd
  2. sudo containerd config default > /etc/containerd/config.toml
复制代码
  (可选,看环境)修改这个文件的 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 中的 SystemdCgroup 为 true:
  

   这个配置指定是否使用 systemd 来管理 cgroup,如果你的 etcd 一直重启的话就开启这个选项试试
    改完了别忘记重启一下 containerd :
  1. systemctl restart containerd
复制代码
三、安装 kubeadm、kubelet、kubectl

1、简单介绍

   kubeadm 是主动引导整个集群的工具,本质上 k8s 就是一些容器服务相互共同完成管理集群的使命,如果你知道具体安装哪些容器那么可以不用这个。
kubalet 是各个节点的总管,它上面都管,管理Pod、资源、日志、节点健康状态等等,它不是一个容器,是一个本地软件,以是必须得安装
kubectl 是下令行工具,给我们敲下令与 k8s 交互用的,必须得安装
  2、安装

   首先得保证源都是新的:
  1. sudo apt update
  2. sudo apt upgrade -y
复制代码
  然后安装一些须要工具:
  1. sudo apt install -y apt-transport-https ca-certificates curl gpg
复制代码
  下载并安装 k8s 包仓库的公共签名密钥:
  1. sudo mkdir -p -m 755 /etc/apt/keyrings
  2. curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  3. sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
复制代码
  添加 k8s 的apt仓库,这一步有点小坑,k8s 官网的教程不够及时。事情是这样的,k8s 之前的官方软件仓库于 2023 年 9 月 13 日 被冻结了,我在 2024年5月19日 使用官网的教程给的地点发现怎么都安装不了,但是 5月21日 的教程更新了,是正常的。
    *** 这个地点:
  1. deb http://apt.kubernetes.io/ kubernetes-xenial main
复制代码
  已经不行了,别再用这个地点了,如果你用这个地点,apt update 会报错:
  1. sudo apt-get update
  2. Hit:1 http://us.archive.ubuntu.com/ubuntu jammy InRelease
  3. Hit:2 http://us.archive.ubuntu.com/ubuntu jammy-updates InRelease
  4. Hit:3 http://us.archive.ubuntu.com/ubuntu jammy-backports InRelease                           
  5. Hit:4 http://security.ubuntu.com/ubuntu jammy-security InRelease                              
  6. Ign:5 https://packages.cloud.google.com/apt kubernetes-xenial InRelease   
  7. Err:6 https://packages.cloud.google.com/apt kubernetes-xenial Release
  8.   404  Not Found [IP: 74.125.142.139 443]
  9. Reading package lists... Done
  10. E: The repository 'https://apt.kubernetes.io kubernetes-xenial Release' does not have a Release file.
  11. N: Updating from such a repository can't be done securely, and is therefore disabled by default.
  12. N: See apt-secure(8) manpage for repository creation and user configuration details.
复制代码
  回到正题,添加 apt 仓库,使用其他版本的换 v1.30 就行:
  1. echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
  2. sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list
复制代码
  更新 apt 索引,并且安装,还要防止软件更新,三步:
  1. sudo apt update
  2. sudo apt install -y kubelet kubectl kubeadm
  3. sudo apt-mark hold kubelet kubeadm kubectl
复制代码
  启动 kubelet ,并且设置开机自启:
  1. sudo systemctl enable --now kubelet
复制代码
  看看有没有安装成功:
  1. kubeadm version
复制代码

四、初始化主节点(只在主节点上做)

1、提前拉取镜像

   如果你以为慢或者出了什么未知的问题,可以提前将所需的镜像拉取下来,因为之前说过了,k8s 实质上是一堆容器服务组合,调理管理其他容器的,那么运行容器就得需要镜像。你可以在 init 前运行这个下令:
  1. sudo kubeadm config images pull \
  2. --kubernetes-version=v1.30.1 \
  3. --cri-socket=unix:///run/containerd/containerd.sock
  4. # --image-repository=registry.aliyuncs.com/google_containers \ # 觉得慢加上这个
复制代码
  这个下令会将所需的镜像提前拉取下来,然后再 init 就会快很多
  2、初始化节点

   有了 kubeadm,就能一键初始化集群主节点了,运行:
  1. sudo kubeadm init \
  2. --apiserver-advertise-address=192.168.10.10 \
  3. --control-plane-endpoint=k8s-master \
  4. --kubernetes-version=v1.30.1 \
  5. --service-cidr=10.50.0.0/16 \
  6. --pod-network-cidr=10.60.0.0/16 \
  7. --cri-socket=unix:///run/containerd/containerd.sock
  8. # --image-repository=registry.aliyuncs.com/google_containers \ # 嫌慢的可以加上这句,用阿里云的镜像,我科学上网就不用了
复制代码
  apiserver-advertise-address 填主节点的IP地点
control-plane-endpoint ,还记得我们在 /etc/hosts 文件中配置的映射关系吗,填主节点的地点或者主机名
kubernetes-version 版本不多说
service-cidr 这是 Service 负载平衡的网络,就是你运行了一堆容器后有一个将它们同一对外袒露的地点,并且将对它们的请求同一网络并负载平衡的网络节点,得为它配置一个网段
pod-network-cidr 每个 Pod 所在的网段
cri-socket 照抄,指定容器化环境
    如果 init 失败,而且失败的原因是没有连接上 api-server 的话,使用下令检察 kubelet 的日志:
  1. journalctl -u kubelet -xe
复制代码
  如果此中有类似这样的错误,但是无法拉取的镜像叫 pause:3.8 的话:
  

   * 如果不是 pause:3.8 ,那就是镜像拉取失败,可能是没有指定国内的源去国外下载失败了,需要指定国内的源并提前拉取镜像;
* 还有可能是我们指定的源(好比阿里源)没有这个镜像,因为 k8s-v1.30.1 这个版本会默认使用 3.8 版本的沙箱,不知道什么原因拉取不下来这个镜像,以是只能拉取 3.9 下来改为 3.8:
  1. ctr --namespace k8s.io image pull registry.aliyuncs.com/google_containers/pause:3.9
  2. ctr --namespace k8s.io image tag registry.aliyuncs.com/google_containers/pause:3.9 registry.k8s.io/pause:3.8
复制代码
  init 失败后需要重置再重新 init,执行:
  1. sudo kubeadm reset # 重置 kubeadm ,执行这个后需要敲 y 回车
  2. sudo rm -rf /etc/cni/net.d # 删除上次 init 生成的文件
  3. sudo rm -rf /var/lib/etcd # 删除上次 init 生成的文件
复制代码
  再次 init,当然,你也可以选择配置文件的方式,和下令行的方式二选一:
  1. apiVersion: kubeadm.k8s.io/v1beta3
  2. kind: ClusterConfiguration
  3. kubernetesVersion: v1.30.1
  4. controlPlaneEndpoint: "k8s-master:6443"
  5. networking:
  6.   podSubnet: "10.100.2.0/24"
  7.   serviceSubnet: "10.100.1.0/24"
  8. apiServer:
  9.   extraArgs:
  10.     advertise-address: "192.168.2.203"
  11. etcd:
  12.   local:
  13.     imageRepository: registry.aliyuncs.com/google_containers
  14. imageRepository: registry.aliyuncs.com/google_containers
  15. ---
  16. apiVersion: kubeadm.k8s.io/v1beta3
  17. kind: InitConfiguration
  18. nodeRegistration:
  19.   criSocket: /run/containerd/containerd.sock
复制代码
  这个只需要 init 时指定配置文件就行:
  1. kubeadm init --config conf.yaml
复制代码
  init 后成功的话会看到类似:
  1. You can now join any number of control-plane nodes by copying certificate authorities
  2. and service account keys on each node and then running the following as root:
  3.   kubeadm join k8s-master:6443 --token is5atc.cc70psy934ptmb4j \
  4.         --discovery-token-ca-cert-hash sha256:cc01bdb1c2c0677ce9043af9f4996352320ae29b81c567a88c42f510f1817715 \
  5.         --control-plane
  6. Then you can join any number of worker nodes by running the following on each as root:
  7. kubeadm join k8s-master:6443 --token is5atc.cc70psy934ptmb4j \
  8.         --discovery-token-ca-cert-hash sha256:cc01bdb1c2c0677ce9043af9f4996352320ae29b81c567a88c42f510f1817715
复制代码
  的东西,在这些下令之前还有几个下令,都执行一下,这是固定的,都这么执行:
  1. mkdir -p $HOME/.kube
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config
复制代码
  init 完后给的下令:
  1. kubeadm join k8s-master:6443 --token is5atc.cc70psy934ptmb4j \
  2.         --discovery-token-ca-cert-hash sha256:cc01bdb1c2c0677ce9043af9f4996352320ae29b81c567a88c42f510f1817715 \
  3.         --control-plane
复制代码
  一个有 --control-plane ,一个没有,没有的那个是子节点运行的,一个子节点只要按照上面的步骤走到安装 kubelet、kubectl、kubeadm 后执行不带 --control-plane  的这部分下令就可以加入集群作为一个子节点,同样的,带 --control-plane  的是加入集群作为主节点,当真正的主节点挂后,这个加入的主节点就有可能成为主节点
  3、留意的问题

   *** 特殊留意,apiserver-advertise-address、service-cidr、pod-network-cidr 三者的IP网段 不能重叠 不能重叠 不能重叠,不光三者之间不能重叠,三者每个也不能与互联网上的地点重叠,不然会出问题,后两个一般用 10.x.x.x 网段,这个网段是留给内网的
  五、安装网络插件 Calico (紧张)

   我们走到这步后还没有完成,因为集群只是在主节点上初始化了,其他呆板要想加入集群,还得使用网络插件将它们连接起来,以是得安装一个网络插件,有很多个,选 Calico 就行。按照官网给的教程安装:
  1. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml
复制代码
  如果报错连接不上的话将文件手动下载下来再执行,没办法国外的网站:
  1. wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml
  2. # 或者
  3. curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml
复制代码
  下载下来后一定不要用 kubectl apply -f 来执行,会报错:
  1. The CustomResourceDefinition "installations.operator.tigera.io" is invalid: metadata.annotations:
  2. Too long: must have at most 262144 bytes
复制代码

   意思是 annotation 长度过长了,原因是 apply 和 create 的处理处罚差别,这点 GitHub 上也有人在吐槽,这是 GitHub上的吐槽地点
改配置文件中这个选项的长度就不改了,我们不用 apply 使用 create:
  1. kubectl create -f tigera-operator.yaml
复制代码
  没报错就没问题
    第二步将配置文件下载下来,因为要改内容:
  1. curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/custom-resources.yaml
复制代码
  修改这个文件中的 192.168.0.0 为你刚才 init 时指定的 --pod-network-cidr:
  1. vi custom-resources.yaml
复制代码

   原本是 192.168.0.0 改为你指定的IP地点
    改好后执行下令,这个文件可以用 apply 因为没有超限制(乐):
  1. kubectl apply -f custom-resources.yaml
复制代码
  就会开始初始化网络插件,耐心等待,直到:
  1. kubectl get pods -A
复制代码
  显示的所有容器都 Running 就完成了

  六、其他节点加入集群(非必须)

1、其他节点加入集群

   首先得保证这个节点能与主节点网络连通,然后执行本文目录中 一 、 二 和 三 的步骤,三个步骤一点都不要漏。
    *** 需要留意的是,我们上面遇到的那个沙箱的问题,pause-3.9、pause-3.8在这个新节点上也要手动拉,在 join 之前。
    还记得我们之前 init 初始化主节点成功时得到的类似:
  

   的字符串吗?复制下面那串:
  1. kubeadm join k8s-master:6443 --token 9qk132.qldpmmgf4hpv37lx \
  2.         --discovery-token-ca-cert-hash \
  3.         sha256:08f59184a092f52d114b114f89a4e05079f63985bf7e62a68a3c254aea8b7469
复制代码
  到要加入集群的这个节点中去执行,但是前提是 一、二、三 中的步骤你都完全执行完了并且没有报错。
    这个下令中有一个 --token ,它是会过期的,过期时间似乎是 24小时 ,如果 token 过期了,执行:
  1. kubeadm token create
复制代码
  天生新的 token,替换下令中的 --token 就行。节点机上成功是这样的:
  

   执行完后这里的成功其实还不算完全成功,要等它 init 完成才算,你只需要在主节点上盯着所有的 Pod 都 Running 了后就可以继承下一步了。
  2、本机成为工作节点 worker node(可选)

   如果你只想在本机上运行所有的 Pod,那么只需要将主节点配置为工作节点,以便它可以调理并运行工作负载。在主节点上启用调理器,一般是移除主节点上的 污点(taint),这些污点会阻止调理器将工作负载调理到主节点。执行下令检察都有哪些污点:
  1. kubectl describe node <主节点的名字,就是我们设置的主机名hostname> | grep Taints
  2. # 我的是:
  3. kubectl describe node k8s-master | grep Taints
  4. Taints:             node-role.kubernetes.io/control-plane:NoSchedule
复制代码
  然后再删除这个污点:
  1. kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane-
复制代码
  现在主节点上也会被摆设 Pod 了。
  3、如果节点初始化失败

   如果这个节点初始化失败,需要重置集群中关于这个节点的东西:
  1. kubectl drain <节点名称> --ignore-daemonsets --delete-emptydir-data # 驱逐节点上的所有 Pod
  2. kubectl delete node <节点名称> # 从集群中删除节点
复制代码
  然后到节点上执行:
  1. sudo kubeadm reset # 执行后按 y
  2. sudo rm -rf /etc/cni/net.d # 移除 CNI 配置
  3. # 清除 iptables 规则
  4. sudo iptables -F
  5. sudo iptables -t nat -F
  6. sudo iptables -t mangle -F
  7. sudo iptables -t raw -F
  8. sudo iptables -X
  9. sudo rm -rf ~/.kube # 删除 kubeconfig 文件(根据你的具体配置路径可能有所不同)
  10. sudo reboot # 可选,可以重启一下节点
复制代码
  重置后再根据环境重新初始化
  七、安装 Kubernetes Dashboard 前端控制面板(可选)

   一直使用下令行手都敲累了,这时候你可以选择安装一个前端可视化页面来控制整个集群。
    首先你得安装官方提供的前端页面,下载这个配置文件,你可以将链接中的 v2.7.0 替换成你想要的版本:
  1. curl -O https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
复制代码
  需要修改差不多二三十行处的
  

   再执行:
  1. kubectl apply -f recommended.yaml
复制代码
  然后就是等待它结束后创建一个配置,用于配置账户和获取token以登录页面,一定要等上面的结束再接着(结束标志是所有的Pod 都 Running):
  1. vi admin.yaml
复制代码
  添加以下内容:
  1. apiVersion: v1
  2. kind: ServiceAccount
  3. metadata:
  4.   name: admin-user
  5.   namespace: kubernetes-dashboard
  6. ---
  7. apiVersion: rbac.authorization.k8s.io/v1
  8. kind: ClusterRoleBinding
  9. metadata:
  10.   name: admin-user
  11. roleRef:
  12.   apiGroup: rbac.authorization.k8s.io
  13.   kind: ClusterRole
  14.   name: cluster-admin
  15. subjects:
  16.   - kind: ServiceAccount
  17.     name: admin-user
  18.     namespace: kubernetes-dashboard                                                
复制代码
  然后再执行:
  1. kubectl apply -f k8s-admin-user.yaml # 这句是创建账户
复制代码
  做到这步后网上的大多数帖子都是让执行:
  1. kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user
  2. | awk '{print $1}')
复制代码
  他们都能天生Token,但是我的不行我的执行了这句代码后出来的是这样的:
  1. root@k8s-master:/app/k8s/dashboard# kubectl -n kubernetes-dashboard describe secret \
  2. $(kubectl -n kubernetes-dashboard get secret | grep admin-user
  3. | awk '{print $1}')
  4. Name:         kubernetes-dashboard-certs
  5. Namespace:    kubernetes-dashboard
  6. Labels:       k8s-app=kubernetes-dashboard
  7. Annotations:  <none>
  8. Type:  Opaque
  9. Data
  10. ====
  11. Name:         kubernetes-dashboard-csrf
  12. Namespace:    kubernetes-dashboard
  13. Labels:       k8s-app=kubernetes-dashboard
  14. Annotations:  <none>
  15. Type:  Opaque
  16. Data
  17. ====
  18. csrf:  256 bytes
  19. Name:         kubernetes-dashboard-key-holder
  20. Namespace:    kubernetes-dashboard
  21. Labels:       <none>
  22. Annotations:  <none>
  23. Type:  Opaque
  24. Data
  25. ====
  26. priv:  1675 bytes
  27. pub:   459 bytes
复制代码
  并没有 Token,可能是由于 API 服务器还没有为我们创建的账户创建默认的 Token,这时候需要本身手动天生密钥,新建一个yaml 文件,加入:
  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4.   name: admin-user-token
  5.   namespace: kubernetes-dashboard
  6.   annotations:
  7.     kubernetes.io/service-account.name: admin-user # 如果上面的用户名你自定义了,记得替换这里
  8. type: kubernetes.io/service-account-token
复制代码
  创建密钥:
  1. kubectl apply -f admin-user-secret.yaml
复制代码
  检查一下天生没有:
  1. kubectl -n kubernetes-dashboard get secret | grep admin-user
复制代码

   发现有,这时候我们再检察 Token:
  1. kubectl -n kubernetes-dashboard describe secret token的名字,这里我们的是admin-user-token
复制代码

   天生了,是不是有点像 RSA 密钥?复制这个 Token 保存一下,以后要用就直接找文件了。
    检察前端页面袒露出去的端口是多少:
  1. kubectl get svc -n kubernetes-dashboard
复制代码

   很明显,我的这个端口是 32713,网页访问恣意一台节点的 https://IP:端口,就能打开页面,记着,必须是 https协议哦。
打开页面有警告不管,点击高级继承访问,你会看到:
  

   还记得之前复制的那个像 RSA密钥的token吗?粘贴进去就能登录了。
    如果上面的步骤照旧存在问题,可以删除并重新创建 ServiceAccount 和 ClusterRoleBinding:
  1. kubectl delete serviceaccount admin-user -n kubernetes-dashboard
  2. kubectl delete clusterrolebinding admin-user
  3. kubectl apply -f - <<EOF
  4. apiVersion: v1
  5. kind: ServiceAccount
  6. metadata:
  7.   name: admin-user
  8.   namespace: kubernetes-dashboard
  9. ---
  10. apiVersion: rbac.authorization.k8s.io/v1
  11. kind: ClusterRoleBinding
  12. metadata:
  13.   name: admin-user
  14. roleRef:
  15.   apiGroup: rbac.authorization.k8s.io
  16.   kind: ClusterRole
  17.   name: cluster-admin
  18. subjects:
  19.   - kind: ServiceAccount
  20.     name: admin-user
  21.     namespace: kubernetes-dashboard
  22. EOF
复制代码
  等待几分钟,然后再次检查天生的 Secret。
  八、摆设 ingress 接收外部流量转发到 service(可选)

1、简介

   大白话就是:在此之前我们都是直接访问 service ,让 service 负载平衡到 Pod 上,优点是直接,缺点是随着 service 的增多端口会越来越多,欠好记。
于是我们在 service 之上再套一层,同一管理浩繁的 service
    流量流向是:流量 --> ingress --> service --> pod
  2、摆设 ingress-nginx

   首先得明确 ingress 其实也是一个 service,它接收外部的流量转发到配置好的指定了的 service,以是当我们摆设 ingress-nginx 时会发现天生了一个关于 ingress 的 service;
    k8s 的 ingress 实现有很多个,就不逐一列举了,各人都用 ingress-nginx;
    执行语句,从 GitHub 上拉取 yaml 开始配置(需要其他版本的改 v1.10.1,但是得留意兼容环境):
  1. curl -O https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1 \
  2. /deploy/static/provider/cloud/deploy.yaml
复制代码
  修改 kind: Service处的两个地方:
  

   ***上面的从 Local 改为 Cluster,如果是 Local ,那么只有到达节点的流量才会被处理处罚,而非本身节点的流量没有反应,意思就是说如果你的主节点是 192.168.10.10 ,恰恰 ingress-nginx 又没有摆设在主节点上,那么你想通过 192.168.10.10访问 ingress 就不行,改为 Cluster 的话,你在集群中任何一台呆板上用 IP:port 访问 ingress 都可以,Cluster 的好处是不管从哪都能访问,缺点是会增加集群内部的流量,因为你的请求流量会在集群之间转发,而且你的 源IP地点 也会变化,因为当你访问到一个没有摆设 ingress 的节点上时,它会被路由到有 ingress 的节点上,以是内部流量才会增加,IP才会变
    ***下面的 LoadBalancer 改为 NodePort ,LoadBalancer 是给云服务器或者本身弄了负载平衡的用的
    应用配置文件:
  1. kubectl apply -f deploy.yaml
复制代码
  检察 ingress 袒露的端口:
  1. kubectl get svc -A
复制代码
  找一个类似这样的:
  

   我这里就是 32536 ,配置一个 ingress 资源,编辑一个 yaml 加入:
  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4.   name: my-ingress
  5.   namespace: default
  6. spec:
  7.   rules:
  8.   - host: mynginx.com
  9.     http:
  10.       paths:
  11.       - path: /
  12.         pathType: Prefix
  13.         backend:
  14.           service:
  15.             name: my-nginx
  16.             port:
  17.               number: 80
复制代码
  这个配置文件的作用是创建一个 Ingress,并且将 mynginx.com 的流量都转发到 my-nginx 这个 service 的80端口中去,在win机上编辑hosts文件(C:\Windows\System32\drivers\etc),加入 192.168.10.10 mynginx.com,浏览器访问 http://mynginx.com:32536就能访问到我们摆设的 Nginx Pod了。
    不想这么贫苦的也可以在集群外搭建一个 MetalLB 实现负载平衡上面的步骤就都不用了,会给你天生一个能直接访问的集群外网地点,EXTERNAL-IP 项就不为 <none> 或 <pending> 了。
  

   图里的下令是我取的别名,不是正规下令
  九、结尾的话

   全部内容大概就是这样,给个免责声明吧:以上仅代表我个人观点,不可能全对,也可能有错的地方,如果后续有错了我会返来改正。后续不定时更新这篇博客的内容。
  参考文献

   在Ubuntu22.04 LTS上搭建Kubernetes集群
k8s1.24+ dashboard不能主动天生token的问题
Kubernetes — Dashboard
CentOS7-安装kubernetes v1.30.0版本
k8s集群摆设时etcd容器不绝重启问题及处理处罚

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4