论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
运维.售后
›
运维.售后
›
【Kubernetes k8s】Ubuntu-22.04搭建 k8s-1.30.1集群, ...
【Kubernetes k8s】Ubuntu-22.04搭建 k8s-1.30.1集群,开启Dashboard-2.7.0 ...
北冰洋以北
金牌会员
|
2024-8-1 21:52:32
|
显示全部楼层
|
阅读模式
楼主
主题
704
|
帖子
704
|
积分
2112
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:
swapoff -a
复制代码
修改配置文件永久关闭,注释这个文件:
vi /etc/fstab
复制代码
中的关于 swap 的那一行,如图,注释掉它:
2、关闭 SELinux
Ubuntu 没有这个东西可以不管,CentOS 执行:
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
复制代码
然后重启系统即可。SELinux 是系统安全方面的,如果你懂怎么弄可以本身配置 SELinux 就不用关,很贫苦,以是各人根本都关了的
3、关闭防火墙
需要关闭防火墙,因为节点之间要相互通讯,开防火墙容易出问题
ufw disable
# 或者
systemctl disable --now ufw
复制代码
4、设置时区(根据本身的时间环境可选)
因为关系到集群呆板之间的通讯,需要一个时间同步各人的行为。设置为上海时区
timedatectl set-timezone Asia/Shanghai
复制代码
重启时间同步服务
systemctl restart systemd-timesyncd.service
复制代码
看一下时间对不对:
timedatectl status
# 或者
date
复制代码
5、修改 /etc/hosts 、/etc/hostname
这个是为了后面填地点的时候方便以及 Kubernetes 要识别主机名
修改 hosts 文件,将本身的IP地点和主机名填进去:
echo "192.168.10.10 k8s-master" | sudo tee -a /etc/hosts
复制代码
其他节点的你想填也填进去
修改 hostsname 文件,两种办法,一种是 hostnamectl 下令,一种是直接修改文件,修改文件的方式:
echo "k8s-master" | sudo tee /etc/hostname
复制代码
修改完主机名文件后最好重启一次ssh终端或系统
6、开启流量转发
开这个的原因是让各个主机负担起网络路由的脚色,因为后续还要安装网络插件,要有一个路由器各个 Pod 才气相互通讯。开 IPv4 ,跟着抄就行,我也是抄的:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
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 为你想要的版本即可:
curl -O https://github.com/containerd/containerd/releases/download/v1.7.17/cri-containerd-cni-1.7.17-linux-amd64.tar.gz
复制代码
解压到根目录:
tar -zxvf cri-containerd-cni-1.7.17-linux-amd64.tar.gz -C /
复制代码
启动 containerd 并且开机自启:
sudo systemctl start containerd
sudo systemctl enable containerd
复制代码
执行看版本正不正常:
containerd -v
复制代码
2、天生配置文件(紧张)
因为我们是用二进制包直接解压的,以是要手动天生配置文件,很紧张,没有这个配置文件的话,你会发现整个 kubelet 在无限重启,因为 etcd 起不来,导致其他容器都在重启。执行:
sudo mkdir -p /etc/containerd
sudo containerd config default > /etc/containerd/config.toml
复制代码
(可选,看环境)修改这个文件的 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 中的 SystemdCgroup 为 true:
这个配置指定是否使用 systemd 来管理 cgroup,如果你的 etcd 一直重启的话就开启这个选项试试
改完了别忘记重启一下 containerd :
systemctl restart containerd
复制代码
三、安装 kubeadm、kubelet、kubectl
1、简单介绍
kubeadm 是主动引导整个集群的工具,本质上 k8s 就是一些容器服务相互共同完成管理集群的使命,如果你知道具体安装哪些容器那么可以不用这个。
kubalet 是各个节点的总管,它上面都管,管理Pod、资源、日志、节点健康状态等等,它不是一个容器,是一个本地软件,以是必须得安装
kubectl 是下令行工具,给我们敲下令与 k8s 交互用的,必须得安装
2、安装
首先得保证源都是新的:
sudo apt update
sudo apt upgrade -y
复制代码
然后安装一些须要工具:
sudo apt install -y apt-transport-https ca-certificates curl gpg
复制代码
下载并安装 k8s 包仓库的公共签名密钥:
sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
复制代码
添加 k8s 的apt仓库,这一步有点小坑,k8s 官网的教程不够及时。事情是这样的,k8s 之前的官方软件仓库于 2023 年 9 月 13 日 被冻结了,我在 2024年5月19日 使用官网的教程给的地点发现怎么都安装不了,但是 5月21日 的教程更新了,是正常的。
*** 这个地点:
deb http://apt.kubernetes.io/ kubernetes-xenial main
复制代码
已经不行了,别再用这个地点了,如果你用这个地点,apt update 会报错:
sudo apt-get update
Hit:1 http://us.archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://us.archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:3 http://us.archive.ubuntu.com/ubuntu jammy-backports InRelease
Hit:4 http://security.ubuntu.com/ubuntu jammy-security InRelease
Ign:5 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
Err:6 https://packages.cloud.google.com/apt kubernetes-xenial Release
404 Not Found [IP: 74.125.142.139 443]
Reading package lists... Done
E: The repository 'https://apt.kubernetes.io kubernetes-xenial Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
复制代码
回到正题,添加 apt 仓库,使用其他版本的换 v1.30 就行:
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
sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list
复制代码
更新 apt 索引,并且安装,还要防止软件更新,三步:
sudo apt update
sudo apt install -y kubelet kubectl kubeadm
sudo apt-mark hold kubelet kubeadm kubectl
复制代码
启动 kubelet ,并且设置开机自启:
sudo systemctl enable --now kubelet
复制代码
看看有没有安装成功:
kubeadm version
复制代码
四、初始化主节点(只在主节点上做)
1、提前拉取镜像
如果你以为慢或者出了什么未知的问题,可以提前将所需的镜像拉取下来,因为之前说过了,k8s 实质上是一堆容器服务组合,调理管理其他容器的,那么运行容器就得需要镜像。你可以在 init 前运行这个下令:
sudo kubeadm config images pull \
--kubernetes-version=v1.30.1 \
--cri-socket=unix:///run/containerd/containerd.sock
# --image-repository=registry.aliyuncs.com/google_containers \ # 觉得慢加上这个
复制代码
这个下令会将所需的镜像提前拉取下来,然后再 init 就会快很多
2、初始化节点
有了 kubeadm,就能一键初始化集群主节点了,运行:
sudo kubeadm init \
--apiserver-advertise-address=192.168.10.10 \
--control-plane-endpoint=k8s-master \
--kubernetes-version=v1.30.1 \
--service-cidr=10.50.0.0/16 \
--pod-network-cidr=10.60.0.0/16 \
--cri-socket=unix:///run/containerd/containerd.sock
# --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 的日志:
journalctl -u kubelet -xe
复制代码
如果此中有类似这样的错误,但是无法拉取的镜像叫 pause:3.8 的话:
* 如果不是 pause:3.8 ,那就是镜像拉取失败,可能是没有指定国内的源去国外下载失败了,需要指定国内的源并提前拉取镜像;
* 还有可能是我们指定的源(好比阿里源)没有这个镜像,因为 k8s-v1.30.1 这个版本会默认使用 3.8 版本的沙箱,不知道什么原因拉取不下来这个镜像,以是只能拉取 3.9 下来改为 3.8:
ctr --namespace k8s.io image pull registry.aliyuncs.com/google_containers/pause:3.9
ctr --namespace k8s.io image tag registry.aliyuncs.com/google_containers/pause:3.9 registry.k8s.io/pause:3.8
复制代码
init 失败后需要重置再重新 init,执行:
sudo kubeadm reset # 重置 kubeadm ,执行这个后需要敲 y 回车
sudo rm -rf /etc/cni/net.d # 删除上次 init 生成的文件
sudo rm -rf /var/lib/etcd # 删除上次 init 生成的文件
复制代码
再次 init,当然,你也可以选择配置文件的方式,和下令行的方式二选一:
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.30.1
controlPlaneEndpoint: "k8s-master:6443"
networking:
podSubnet: "10.100.2.0/24"
serviceSubnet: "10.100.1.0/24"
apiServer:
extraArgs:
advertise-address: "192.168.2.203"
etcd:
local:
imageRepository: registry.aliyuncs.com/google_containers
imageRepository: registry.aliyuncs.com/google_containers
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
nodeRegistration:
criSocket: /run/containerd/containerd.sock
复制代码
这个只需要 init 时指定配置文件就行:
kubeadm init --config conf.yaml
复制代码
init 后成功的话会看到类似:
You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:
kubeadm join k8s-master:6443 --token is5atc.cc70psy934ptmb4j \
--discovery-token-ca-cert-hash sha256:cc01bdb1c2c0677ce9043af9f4996352320ae29b81c567a88c42f510f1817715 \
--control-plane
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join k8s-master:6443 --token is5atc.cc70psy934ptmb4j \
--discovery-token-ca-cert-hash sha256:cc01bdb1c2c0677ce9043af9f4996352320ae29b81c567a88c42f510f1817715
复制代码
的东西,在这些下令之前还有几个下令,都执行一下,这是固定的,都这么执行:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
复制代码
init 完后给的下令:
kubeadm join k8s-master:6443 --token is5atc.cc70psy934ptmb4j \
--discovery-token-ca-cert-hash sha256:cc01bdb1c2c0677ce9043af9f4996352320ae29b81c567a88c42f510f1817715 \
--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 就行。按照官网给的教程安装:
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml
复制代码
如果报错连接不上的话将文件手动下载下来再执行,没办法国外的网站:
wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml
# 或者
curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml
复制代码
下载下来后一定不要用 kubectl apply -f 来执行,会报错:
The CustomResourceDefinition "installations.operator.tigera.io" is invalid: metadata.annotations:
Too long: must have at most 262144 bytes
复制代码
意思是 annotation 长度过长了,原因是 apply 和 create 的处理处罚差别,这点 GitHub 上也有人在吐槽,这是 GitHub上的吐槽地点
改配置文件中这个选项的长度就不改了,我们不用 apply 使用 create:
kubectl create -f tigera-operator.yaml
复制代码
没报错就没问题
第二步将配置文件下载下来,因为要改内容:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/custom-resources.yaml
复制代码
修改这个文件中的 192.168.0.0 为你刚才 init 时指定的 --pod-network-cidr:
vi custom-resources.yaml
复制代码
原本是 192.168.0.0 改为你指定的IP地点
改好后执行下令,这个文件可以用 apply 因为没有超限制(乐):
kubectl apply -f custom-resources.yaml
复制代码
就会开始初始化网络插件,耐心等待,直到:
kubectl get pods -A
复制代码
显示的所有容器都 Running 就完成了
六、其他节点加入集群(非必须)
1、其他节点加入集群
首先得保证这个节点能与主节点网络连通,然后执行本文目录中 一 、 二 和 三 的步骤,三个步骤一点都不要漏。
*** 需要留意的是,我们上面遇到的那个沙箱的问题,pause-3.9、pause-3.8在这个新节点上也要手动拉,在 join 之前。
还记得我们之前 init 初始化主节点成功时得到的类似:
的字符串吗?复制下面那串:
kubeadm join k8s-master:6443 --token 9qk132.qldpmmgf4hpv37lx \
--discovery-token-ca-cert-hash \
sha256:08f59184a092f52d114b114f89a4e05079f63985bf7e62a68a3c254aea8b7469
复制代码
到要加入集群的这个节点中去执行,但是前提是 一、二、三 中的步骤你都完全执行完了并且没有报错。
这个下令中有一个 --token ,它是会过期的,过期时间似乎是 24小时 ,如果 token 过期了,执行:
kubeadm token create
复制代码
天生新的 token,替换下令中的 --token 就行。节点机上成功是这样的:
执行完后这里的成功其实还不算完全成功,要等它 init 完成才算,你只需要在主节点上盯着所有的 Pod 都 Running 了后就可以继承下一步了。
2、本机成为工作节点 worker node(可选)
如果你只想在本机上运行所有的 Pod,那么只需要将主节点配置为工作节点,以便它可以调理并运行工作负载。在主节点上启用调理器,一般是移除主节点上的 污点(taint),这些污点会阻止调理器将工作负载调理到主节点。执行下令检察都有哪些污点:
kubectl describe node <主节点的名字,就是我们设置的主机名hostname> | grep Taints
# 我的是:
kubectl describe node k8s-master | grep Taints
Taints: node-role.kubernetes.io/control-plane:NoSchedule
复制代码
然后再删除这个污点:
kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane-
复制代码
现在主节点上也会被摆设 Pod 了。
3、如果节点初始化失败
如果这个节点初始化失败,需要重置集群中关于这个节点的东西:
kubectl drain <节点名称> --ignore-daemonsets --delete-emptydir-data # 驱逐节点上的所有 Pod
kubectl delete node <节点名称> # 从集群中删除节点
复制代码
然后到节点上执行:
sudo kubeadm reset # 执行后按 y
sudo rm -rf /etc/cni/net.d # 移除 CNI 配置
# 清除 iptables 规则
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -t raw -F
sudo iptables -X
sudo rm -rf ~/.kube # 删除 kubeconfig 文件(根据你的具体配置路径可能有所不同)
sudo reboot # 可选,可以重启一下节点
复制代码
重置后再根据环境重新初始化
七、安装 Kubernetes Dashboard 前端控制面板(可选)
一直使用下令行手都敲累了,这时候你可以选择安装一个前端可视化页面来控制整个集群。
首先你得安装官方提供的前端页面,下载这个配置文件,你可以将链接中的 v2.7.0 替换成你想要的版本:
curl -O https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
复制代码
需要修改差不多二三十行处的
再执行:
kubectl apply -f recommended.yaml
复制代码
然后就是等待它结束后创建一个配置,用于配置账户和获取token以登录页面,一定要等上面的结束再接着(结束标志是所有的Pod 都 Running):
vi admin.yaml
复制代码
添加以下内容:
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
复制代码
然后再执行:
kubectl apply -f k8s-admin-user.yaml # 这句是创建账户
复制代码
做到这步后网上的大多数帖子都是让执行:
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user
| awk '{print $1}')
复制代码
他们都能天生Token,但是我的不行我的执行了这句代码后出来的是这样的:
root@k8s-master:/app/k8s/dashboard# kubectl -n kubernetes-dashboard describe secret \
$(kubectl -n kubernetes-dashboard get secret | grep admin-user
| awk '{print $1}')
Name: kubernetes-dashboard-certs
Namespace: kubernetes-dashboard
Labels: k8s-app=kubernetes-dashboard
Annotations: <none>
Type: Opaque
Data
====
Name: kubernetes-dashboard-csrf
Namespace: kubernetes-dashboard
Labels: k8s-app=kubernetes-dashboard
Annotations: <none>
Type: Opaque
Data
====
csrf: 256 bytes
Name: kubernetes-dashboard-key-holder
Namespace: kubernetes-dashboard
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
priv: 1675 bytes
pub: 459 bytes
复制代码
并没有 Token,可能是由于 API 服务器还没有为我们创建的账户创建默认的 Token,这时候需要本身手动天生密钥,新建一个yaml 文件,加入:
apiVersion: v1
kind: Secret
metadata:
name: admin-user-token
namespace: kubernetes-dashboard
annotations:
kubernetes.io/service-account.name: admin-user # 如果上面的用户名你自定义了,记得替换这里
type: kubernetes.io/service-account-token
复制代码
创建密钥:
kubectl apply -f admin-user-secret.yaml
复制代码
检查一下天生没有:
kubectl -n kubernetes-dashboard get secret | grep admin-user
复制代码
发现有,这时候我们再检察 Token:
kubectl -n kubernetes-dashboard describe secret token的名字,这里我们的是admin-user-token
复制代码
天生了,是不是有点像 RSA 密钥?复制这个 Token 保存一下,以后要用就直接找文件了。
检察前端页面袒露出去的端口是多少:
kubectl get svc -n kubernetes-dashboard
复制代码
很明显,我的这个端口是 32713,网页访问恣意一台节点的 https://IP:端口,就能打开页面,记着,必须是 https协议哦。
打开页面有警告不管,点击高级继承访问,你会看到:
还记得之前复制的那个像 RSA密钥的token吗?粘贴进去就能登录了。
如果上面的步骤照旧存在问题,可以删除并重新创建 ServiceAccount 和 ClusterRoleBinding:
kubectl delete serviceaccount admin-user -n kubernetes-dashboard
kubectl delete clusterrolebinding admin-user
kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
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,但是得留意兼容环境):
curl -O https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1 \
/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 是给云服务器或者本身弄了负载平衡的用的
应用配置文件:
kubectl apply -f deploy.yaml
复制代码
检察 ingress 袒露的端口:
kubectl get svc -A
复制代码
找一个类似这样的:
我这里就是 32536 ,配置一个 ingress 资源,编辑一个 yaml 加入:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: default
spec:
rules:
- host: mynginx.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-nginx
port:
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企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
北冰洋以北
金牌会员
这个人很懒什么都没写!
楼主热帖
Linux基础篇(6)---》常用命令大全(网络 ...
Unity的AssetPostprocessor之Model之动 ...
如何快速而优雅的解决问题(提问的智慧 ...
鸿蒙最新功能及承载设备详解:HarmonyO ...
计算机组成原理—运算方式
零代码,让业务人员实现应用创造自由 ...
超融合,变了?
MySQL外键约束和多表查询
java基础_基本数据类型
Spring AOP中增强Advice的执行顺序 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表