当前位置: 首页 > news >正文

CKA认证 | Day1 k8s核心概念与集群搭建

第一章 Kubernetes 核心概念

1、主流的容器集群管理系统

容器编排系统:

  • Kubernetes
  • Swarm
  • Mesos Marathon

 

2、Kubernetes介绍

Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8s。

Kubernetes用于容器化应用程序的部署,扩展和管理,目标是让部署容器化应用简单高效。

官方网站:Kubernetes

官方文档:Kubernetes 文档 | Kubernetes

注意:熟悉文档中的【概念】、【任务】

3、Kubernetes集群架构与组件

3.1 Master 组件

  • kube-apiserver

Kubernetes API,集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。

  • kube-scheduler

根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。

  • kube-controller-manager

处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。例如:Deployment、Service

  • etcd

分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对象信息(可以部署在Master节点或者独立节点)

 

3.2 Work/node 组件

  • kubelet

kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。

  • kube-proxy

在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。

  • 第三方容器引擎

容器引擎,运行容器, 例如docker、containerd、podman

 

第二章 Kubernetes集群部署、配置和验证

1、生产环境部署K8s的2种方式

  • kubeadm

Kubeadm是一个工具,提供 kubeadm init 和 kubeadm join,用于快速部署Kubernetes集群。

部署地址:Kubeadm | Kubernetes

  • 二进制

从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。

下载地址:Releases · kubernetes/kubernetes · GitHub

  • 第三方工具或者Web

 

2、服务器硬件配置推荐

3、使用kubeadm快速部署一个K8s集群

参考:CKA认证 | 使用kubeadm部署K8s集群(v1.26)-CSDN博客

  1. 安装Docker(docker-ce容器引擎、cri-docker容器运行时)
  2. 创建 Master 、node节点
  3. kubeadm init初始化集群
  4. 将一个 Node 节点加入到当前集群中 (kubeadm join < Master节点的IP和端口 >)
  5. 部署容器网络(CNI)(kubectl apply -f calico.yaml)
  6. 部署Web UI(Dashboard)

部署k8s集群避坑:

  1. cri-docker 版本 必须使用的是 0.3(最新的版本),否则将会存在兼容性问题;
  2. 使用镜像拉取比较慢的问题(可能是网络问题),使用docker pull在别的服务器进行下载,通过docker save保存下来,通过 docker load 导入所有节点;
  3. 在master上 kubeadm init 时执行失败,大部分问题为kubelet无法启动,原因可能是主机的初始化为准备好、其次cri-docker没安装最新版本
  4. 安装有问题需要清空环境配置,通过 kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock 进行还原
  5. kubeadm init 会输出关于工作节点进行join的命令,有效期24小时,通过 kubeadm token create --print-join-command 生成新的token

 

4、部署的网络组件起什么作用?

Q: 不同docker服务器的两个容器间的访问遇到问题:

① 容器1和容器2 分配的IP有可能一样,是因为docker主机有各自的网络管理机制、独立的?

  • 思路:设置不同网段

② 容器1和容器2 分配的IP即使不一样,也是网络无法ping通,是因为容器1发送的数据包不知道送往何处?

  • 思路:配置路由

③ 即使知道将数据包送往何处,那通过什么方式通过容器送达?

  • 思路:容器的数据包需要通过宿主机网络将数据包发送到对端的宿主机再传送到里面的容器

A: 部署网络组件的目的是打通Pod到Pod之间网络、Node与Pod之间网络,从而集群中数据包可以任意传输,形成了一 个扁平化网络。所以网络组件的主要作用是可以实现容器跨主机通信


目前主流的网络组件:Flannel、Calico 等 ;而所谓的 CNI( Container Network Interface,容器网络接口)就是k8s对接这些第三方网络组件的接口。

补充:

CNI 容器网络接口,对接网络组件

CRI 容器运行时接口,对接容器引擎

CSI 容器存储接口,对接存储组件

 

5、Kubernetes将弃用Docker!

在Kubernetes平台中,为了解决与容器运行时(例如Docker)集成 问题,在早期社区推出了CRI(Container Runtime Interface,容 器运行时接口),以支持更多的容器运行时。

当我们使用Docker作为容器运行时之后,架构是这样的,如图所示:

Kubernetes 计划弃用就是kubelet中dockershim。即 Kubernetes kubelet 实现中的组件之一,它能够与 Docker Engine 进行通信。

Q:为什么这么做?

  • K8s核心代码优化
  • Docker内部调用链比较复杂,多层封装和调用,导致性能降低、提升故障率、不易排查
  • Docker还会在宿主机创建网络规则、存储卷,也带来了安全隐患

Q:如何应对?

可通过 cri-dockerd 继续使用Docker,并了解其他主流容器运行时。除了docker之外,CRI还支持很多容器运行时,例如:

  • containerd:containerd与Docker相兼容,相比Docker轻量很多,目前较为成熟
  • cri-o,podman:都是红帽(RedHat)项目,目前红帽主推podman

Q:相关 containerd 切换的其它疑问?

① 独立的容器运行时,在一个集群中可以有多个运行时,一般再测试环境下才会有两个容器运行时

② 正常要求下,在切换容器运行时,建议在所有的节点都要进行切换操作,不建议混用,不利于后期的维护

③ 目前主流的镜像都是通用的

 

6、kubeconfig配置文件

kubectl 使用 kubeconfig 认证文件连接K8s集群,使用 kubectl config 指令生成 kubeconfig文件。

了解:关于config文件 只是一个“管理工具” 无论在哪个节点 都可以访问 (例如:在本地虚拟机上也可以访问公司的集群)

 

7、kubectl命令行管理工具

官方文档参考地址:命令行工具 (kubectl) | Kubernetes

# 自动补全
yum -y install bash-completion
source <(kubectl completion bash)
vi .bashrc    //将 source <(kubectl completion bash) 写入,开机自启
# 查看客户端和服务端的版本
[root@k8s-master-1-71 ~]# kubectl version
WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short.  Use --output=yaml|json to get the full version.   //提示未来会弃用需要加参数[root@k8s-master-1-71 ~]# kubectl version --output=yaml
clientVersion:      //客户端版本buildDate: "2022-12-08T19:58:30Z"compiler: gcgitCommit: b46a3f887ca979b1a5d14fd39cb1af43e7e5d12dgitTreeState: cleangitVersion: v1.26.0goVersion: go1.19.4major: "1"minor: "26"platform: linux/amd64
kustomizeVersion: v4.5.7
serverVersion:    //APIserver版本buildDate: "2022-12-08T19:51:45Z"compiler: gcgitCommit: b46a3f887ca979b1a5d14fd39cb1af43e7e5d12dgitTreeState: cleangitVersion: v1.26.0goVersion: go1.19.4major: "1"minor: "26"platform: linux/amd64
# 创建资源(功能),例如deployment、service等
例:kubectl create deployment java-demo --image=镜像来源
# --image=镜像来源
1、docker官方公共镜像仓库(hub.docker.com),默认使用,镜像地址没有带域名或者IP
2、指定镜像仓库,即镜像地址带域名或者IP
例:kubectl create deployment java-demo --image=镜像来源 --replices=1
# --replices 副本数(默认是1副本)# 暴露应用
例:kubectl expose deployment java-demo --port=端口 --target-port=端口 --type=NodePort
--port=service的端口
--target-port=镜像内服务运行的端口
--type=service的类型,例如NodePort# 查看相关镜像
例:kubectl get pods --show-lables
例:kubectl get pods -l app=ngix
--show-lables   //查看pods标签
-l 标签   //可以进行过滤# 查看服务
kubectl get service

 

8、快速部署一个网站

使用Deployment控制器部署镜像:

[root@k8s-master-1-71 ~]# kubectl create deployment java-demo --image=lizhenliang/java-demo
deployment.apps/java-demo created[root@k8s-master-1-71 ~]# kubectl get deployment
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
java-demo   1/1     1            1           5m51s[root@k8s-master-1-71 ~]# kubectl get pods
NAME                         READY   STATUS    RESTARTS   AGE
java-demo-5cb596f979-47g2r   1/1     Running   0          5m46s

使用Service将Pod暴露出去:

[root@k8s-master-1-71 ~]# kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort
service/java-demo exposed[root@k8s-master-1-71 ~]# kubectl get services
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
java-demo    NodePort    10.105.177.89   <none>        80:32710/TCP   88s
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        3h7m
或者
[root@k8s-master-1-71 ~]# kubectl get svc   //svc为缩写

访问应用:

http://NodeIP:Port # 端口随机生成,通过kubectl get service获取

9、基本资源概念

  • Pod:K8s最小部署单元,一组容器的集合
  • Deployment:最常见的控制器,用于更高级别部署和管理Pod
  • Service:为一组Pod提供负载均衡,对外提供统一访问入口
  • Label :标签,附加到某个资源上,用于关联对象、查询和筛选
  • Namespaces :命名空间,将对象逻辑上隔离,也利于权限控制

 

9.1 标签(Label)

创建标签:kubectl label deployment/pod/其他 xxx -n 命名空间 标签名=标签值 --overwrite

[root@k8s-master-1-71 ~]# kubectl get pods
NAME                         READY   STATUS    RESTARTS   AGE
java-demo-5cb596f979-47g2r   1/1     Running   0          28m# 查看资源的标签
[root@k8s-master-1-71 ~]# kubectl get pods --show-labels
NAME                         READY   STATUS    RESTARTS   AGE   LABELS
java-demo-5cb596f979-47g2r   1/1     Running   0          28m   app=java-demo,pod-template-hash=5cb596f979# 根据标签过滤显示资源   
[root@k8s-master-1-71 ~]# kubectl get pods -l app=java-demo
NAME                         READY   STATUS    RESTARTS   AGE
java-demo-5cb596f979-47g2r   1/1     Running   0          29m

 

9.2 命名空间(Namespace)

Kubernetes将资源对象逻辑上隔离,从而形成多个虚拟集群

应用场景:

  • 资源分类管理,可根据不同团队、项目划分命名空间
  • 基于命名空间权限授权

查看命名空间:kubectl get namespace

default:默认命名空间

kube-system:K8s系统方面的命名空间

kube-public:公开的命名空间,谁都可以访问

kube-node-lease:K8s内部命名空间

[root@k8s-master-1-71 ~]# kubectl get namespace
NAME                   STATUS   AGE
default                Active   55m
kube-node-lease        Active   55m
kube-public            Active   55m
kube-system            Active   55m
kubernetes-dashboard   Active   9m38s

创建命名空间:kubectl create namespace 命名空间

[root@k8s-master-1-71 ~]# kubectl create namespace test
namespace/test created
[root@k8s-master-1-71 ~]# kubectl get namespaces
NAME                   STATUS   AGE
default                Active   3h25m
kube-node-lease        Active   3h25m
kube-public            Active   3h25m
kube-system            Active   3h25m
kubernetes-dashboard   Active   160m
test                   Active   9s
或者
[root@k8s-master-1-71 ~]# kubectl get ns

两种方法指定资源所属的命名空间:

  • 命令行加 -n
  • yaml 资源元数据里指定 namespace字段
[root@k8s-master-1-71 ~]# kubectl create deployment java-demo2 --image=lizhenliang/java-demo -n test
deployment.apps/java-demo2 created
[root@k8s-master-1-71 ~]# kubectl get pods -n test
NAME                          READY   STATUS    RESTARTS   AGE
java-demo2-58bc68b877-46gq7   1/1     Running   0          30s

 


扩展实践

1、使用kubeadm搭建一个K8s集群

2、新建一个命名空间,创建一个deployment并暴露Service

  • 命名空间:aliang-cka
  • 名称:web
  • 镜像:nginx

3、列出命名空间下指定标签pod

  • 命名空间名称:kube-system
  • 标签:k8s-app=kube-dns

小结:

本篇为 【Kubernetes CKA认证 Day1 】的学习笔记,希望这篇笔记可以让您初步了解到 k8s核心概念与集群搭建,课后还有扩展实践,不妨跟着我的笔记步伐亲自实践一下吧!


Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。

相关文章:

CKA认证 | Day1 k8s核心概念与集群搭建

第一章 Kubernetes 核心概念 1、主流的容器集群管理系统 容器编排系统&#xff1a; KubernetesSwarmMesos Marathon 2、Kubernetes介绍 Kubernetes是Google在2014年开源的一个容器集群管理系统&#xff0c;Kubernetes简称K8s。 Kubernetes用于容器化应用程序的部署&#x…...

[极客大挑战 2019]PHP 1

[极客大挑战 2019]PHP 1 审题 猜测备份在www.zip中&#xff0c;输入下载文件。 知识点 反序列化 解题 查看代码 看到index.php中包含了class.php,直接看class.php中的代码 查看条件 当usernameadmin&#xff0c;password100时输出flag 构造反序列化 输入select中&#…...

【c++丨STL】vector模拟实现

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 一、vector底层刨析 二、模拟实现 1. 属性、迭代器以及函数声明 2. 功能实现 交换两个容器的内容 构造函数 拷贝构造 赋值重载 析构…...

SQLAlchemy 介绍与实践

postgresql 实践 pydantic 实践 1. SQLAlchemy 介绍 SQLAlchemy 是一个 ORM 框架。SQLAlchemy 是一个用于 Python 的 SQL 工具和对象关系映射&#xff08;ORM&#xff09;库。它允许你通过 Python 代码来与关系型数据库交互&#xff0c;而不必直接编写SQL语句。 简单介绍一下…...

docker进行SRS直播服务器搭建

docker进行SRS直播服务器搭建 docker构建参考地址: 地址&#xff1a; https://github.com/ossrs/srs https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \-p 8000:8000/udp -p 10080:10080/udp ossrs/sr…...

windows server2019下载docker拉取redis等镜像并运行项目

一、基本概念 1、windows server 指由微软公司开发的“Windows”系列中的“服务器”版本。这意味着它是基于Windows操作系统的&#xff0c;但专门设计用于服务器环境&#xff0c;而不是普通的桌面或个人用户使用。主要用途包括服务器功能、用户和资源管理、虚拟化等 2、dock…...

数据结构(8.7_2)——败者树

多路平衡归并带来的问题 什么是败者树 败者树的构造 败者树的使用 败者树在多路平衡归并中的应用 败者树的实现思路 总结...

设计模式-七个基本原则之一-里氏替换原则

里氏替换原则&#xff08;LSP&#xff09;面向对象六个基本原则之一 子类与父类的替代性&#xff1a;子类应当能够替代父类出现的任何地方&#xff0c;且表现出相同的行为。行为的一致性&#xff1a;子类的行为必须与父类保持一致&#xff0c;包括输入和输出、异常处理等。接口…...

k8s中基于overlay网络和underlay网络的网络插件分别有哪些

在 Kubernetes 中&#xff0c;不同的网络插件会使用 overlay 或 underlay 网络来连接 Pod 和节点。以下是基于 overlay 网络和 underlay 网络的常见 Kubernetes 网络插件&#xff1a; 1. 基于 Overlay 网络的插件 这些插件通过隧道封装技术&#xff08;如 VXLAN、GRE 等&#…...

一文详解java的数据类型

1. 题记 Java是一门对数据类型敏感的语言&#xff0c;本博文主要总结介绍java语言的数据类型。 2. java的数据类型 Java 的数据类型分为基本数据类型&#xff08;Primitive Data Types&#xff09;和引用数据类型&#xff08;Reference Data Types&#xff09;。 2.1 基本数…...

Flink API 的层次结构

Apache Flink 提供了多层 API&#xff0c;每层 API 针对不同的抽象层次和用途&#xff0c;使得开发者可以根据具体需求选择合适的 API 层次。以下是 Flink API 的层次结构及其简要说明&#xff1a;...

lua入门教程:math

在Lua中&#xff0c;math库是一个非常重要的内置库&#xff0c;它提供了许多用于数学计算的函数。这些函数可以处理各种数学运算&#xff0c;包括基本的算术运算、三角函数、对数函数、随机数生成等。结合你之前提到的Lua中的数字遵循IEEE 754双精度浮点标准&#xff0c;我们可…...

ROS2简介与Ubuntu24.04中安装指南

之前安装了一个版本&#xff0c;但是不愿意写blog&#xff0c;现在想想自己就是个沙子立个flag&#xff0c;每次配置项目&#xff0c;写流程blog ROS简介 ROS&#xff08;Robot Operating System&#xff09;是一个开源的机器人软件平台&#xff0c;提供了许多工具和库来帮助…...

命令行工具PowerShell使用体验

命令行工具PowerShell使用 PowerShell是微软开发的一种面向对象的命令行Shell和脚本语言环境&#xff0c;它允许用户通过命令行的方式管理操作系统。相较于传统CMD&#xff0c;PowerShell增加了面向对象的程序设计框架&#xff0c;拥有更强大的功能和扩展性。使用PowerShell可…...

MongoDB 详解:深入理解与探索

在当今的数据库领域&#xff0c;MongoDB 以其独特的特性和强大的功能&#xff0c;成为了众多开发者和企业的首选。本文将对 MongoDB 进行详细的介绍&#xff0c;包括其特点、应用场景、流程图以及源码分析。 一、MongoDB 概述 MongoDB 是一个基于分布式文件存储的开源数据库系…...

使用 Elasticsearch 构建食谱搜索(一)

作者&#xff1a;来自 Elastic Andre Luiz 了解如何使用 Elasticsearch 构建基于语义搜索的食谱搜索。 简介 许多电子商务网站都希望增强其食谱搜索体验。正确使用语义搜索可以让客户根据更自然的查询&#xff08;例如 “something for Valentines Day - 情人节的礼物” 或 “…...

sealos部署K8s,安装docker时master节点突然NotReady

1、集群正常运行中&#xff0c;在集群master-1上安装了dockerharbor&#xff0c;却发现master-1节点NotReady&#xff0c;使用的网络插件为 Cilium #安装docker和harbor&#xff08;docker运行正常&#xff09; rootmaster-1:/etc/apt# apt install docker-ce5:19.03.15~3-0~u…...

使用vite+react+ts+Ant Design开发后台管理项目(五)

前言 本文将引导开发者从零基础开始&#xff0c;运用vite、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈&#xff0c;构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导&#xff0c;文章旨在为开发者揭示如何利用这些技术…...

Spring Boot实现多数据源连接和切换

文章目录 前言一、多数据源配置与切换方案二、实现步骤1. 创建多个 DataSource 配置类2. 创建 DataSource 配置类3. 创建动态数据源路由类4. 实现 DynamicDataSource 类5. 创建 DataSourceContextHolder 来存储当前的数据源标识6. AOP 方式切换数据源7. 自定义注解来指定数据源…...

发布 VectorTraits v3.0(支持 X86架构的Avx512系列指令集,支持 Wasm架构及PackedSimd指令集等)

文章目录 支持 X86架构的Avx512系列指令集支持Avx512时的输出信息 支持 Wasm架构及PackedSimd指令集支持PackedSimd时的输出信息VectorTraits.Benchmarks.Wasm 使用说明 新增了向量方法支持 .NET 8.0 新增的向量方法提供交织与解交织的向量方法YGroup3Unzip的范例代码 提供重新…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...