K8S第三讲 Kubernetes集群配置网络插件

news/2025/2/21 1:20:20/

在Kubernetes集群中,网络插件是必需的,因为它们为Pod提供了可访问的IP地址,并确保它们能够相互通信。Kubernetes支持多种网络插件,包括Calico、Flannel、Weave Net等。这里以Calico为例介绍如何配置Kubernetes集群的网络插件。

插件配置可以参考官网: K8S集群网络插件列表

1: 安装Calico
使用kubectl命令安装Calico网络插件,示例命令如下:

kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

该命令将安装Calico的所有必需组件,包括etcd、Calico节点和Calico CNI插件。

2: 配置Calico网络策略
Calico支持强大的网络策略功能,可以在集群中实现细粒度的网络控制。您可以使用Calico的Kubernetes网络策略API来定义网络策略,示例命令如下:

kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico-policy-only.yaml

该命令将启用Calico的Kubernetes网络策略API,并关闭所有其他策略,只允许使用Kubernetes网络策略。

3: 检查Calico是否正常工作
您可以使用以下命令检查Calico是否正常工作:

kubectl get pods --all-namespaces

此命令将显示所有命名空间中的Pod,包括Calico节点和CNI插件。确保这些组件都正常运行并且没有错误。

4: 配置网络CIDR
在安装Calico之前,您需要确定Kubernetes集群中将使用的网络CIDR。网络CIDR是集群中所有Pod的IP地址的子网。示例命令如下:

kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml -f - <<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:name: my-ippool
spec:cidr: 192.168.0.0/16natOutgoing: true
EOF

该命令将创建名为“my-ippool”的IP地址池,其中CIDR为“192.168.0.0/16”。

5: 配置节点互联
如果您的Kubernetes集群跨越多个节点,请确保所有节点都能够相互通信。您可以使用以下命令在节点之间创建Calico网络:

kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml -f - <<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:name: my-ippool
spec:cidr: 192.168.0.0/16natOutgoing: true
---
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:name: default
spec:logSeverityScreen: Info
---
apiVersion:

k8s- kube-proxy

在Kubernetes集群中,kube-proxy是一个控制平面组件,它负责维护集群中的网络规则。kube-proxy的主要职责是在每个节点上监听Kubernetes API服务器上的服务和端口对象,然后动态地将这些服务和端口对象映射到对应的Pod或节点IP地址和端口上。

kube-proxy有三种工作模式:

  • Userspace模式:kube-proxy会在每个节点上启动一个代理进程,该进程通过绑定服务的端口和地址来实现服务的负载均衡和代理。这种模式的性能比较低,但是可以在几乎所有的环境中运行。

  • iptables模式:kube-proxy通过在节点上设置iptables规则来实现服务的负载均衡和代理。这种模式的性能比Userspace模式要好,并且可以利用Linux内核的高性能网络功能,例如IPVS。

  • IPVS模式:kube-proxy通过利用Linux内核的IPVS模块来实现服务的负载均衡和代理。这种模式的性能比iptables模式更好,并且可以支持更多的负载均衡算法。

在默认情况下,Kubernetes使用iptables模式来运行kube-proxy。如果您想使用其他模式,请在kube-proxy配置中指定。要查看kube-proxy的配置,请使用以下命令:

kubectl describe configmap -n kube-system kube-proxy

kube-proxy是Kubernetes网络体系结构中的一个关键组件,它确保了服务的可用性和可靠性。

删除 calico 网络插件

如果您要从Kubernetes集群中删除Calico网络插件,则可以按照以下步骤操作:

删除Calico DaemonSet:要删除Calico网络插件,首先需要删除它的DaemonSet对象。您可以使用以下命令删除DaemonSet::

kubectl delete ds calico-node -n kube-system

除Calico自定义资源定义:Calico网络插件使用自定义资源定义(CRD)来管理其配置和策略。您可以使用以下命令删除这些CRD:

kubectl delete crd felixconfigurations.crd.projectcalico.org \ipamblocks.crd.projectcalico.org \ipamconfigs.crd.projectcalico.org \blockaffinities.crd.projectcalico.org \ipamhandles.crd.projectcalico.org \clusterinformations.crd.projectcalico.org \globalnetworkpolicies.crd.projectcalico.org \networkpolicies.crd.projectcalico.org \hostendpoints.crd.projectcalico.org \bgppeers.crd.projectcalico.org \bgpconfigurations.crd.projectcalico.org \ippools.crd.projectcalico.org \hostsubnetpolicies.crd.projectcalico.org \networksets.crd.projectcalico.org

删除Calico命名空间:Calico网络插件通常会在kube-system命名空间中安装,因此您可以使用以下命令删除该命名空间:

kubectl delete ns kube-system

注意:在执行这些命令之前,建议您备份您的Kubernetes集群。此外,删除Calico网络插件可能会影响您的Kubernetes集群中的网络配置和策略。如果您不确定如何删除Calico网络插件,请咨询Kubernetes社区或Calico社区的支持。

网络插件

kubectl 本身不是网络插件,它是 Kubernetes 的命令行工具,用于与 Kubernetes API 交互并管理 Kubernetes 对象。要安装网络插件,您可以使用 kubectl apply 命令应用所需的 YAML 文件或使用工具(例如 Helm)来部署预定义的 Kubernetes 应用程序。以下是一些常见的网络插件及其安装方法:

Calico:您可以使用以下命令安装 Calico 网络插件:

kubectl apply -f https://docs.projectcalico.org/v3.19/manifests/calico.yaml

Flannel:您可以使用以下命令安装 Flannel 网络插件:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Weave Net:您可以使用以下命令安装 Weave Net 网络插件:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

请注意,这些命令将应用所需的 YAML 文件,以在您的 Kubernetes 群集中部署网络插件。

Flannel 网络插件安装后使用

确认Flannel网络插件已经正常启动。可以通过以下命令检查:
kubectl get pods --all-namespaces
如果看到Flannel相关的pod处于Running状态,则表示Flannel已经正常启动。创建一个Flannel配置文件。可以使用以下命令创建一个名为flannel.yaml的文件:
apiVersion: v1
kind: ConfigMap
metadata:name: kube-flannel-cfgnamespace: kube-system
data:cni-conf.json: |{"name": "cbr0","plugins": [{"type": "flannel","delegate": {"hairpinMode": true,"isDefaultGateway": true}},{"type": "portmap","capabilities": {"portMappings": true}}]}net-conf.json: |{"Network": "10.244.0.0/16","Backend": {"Type": "vxlan"}}
使用kubectl apply命令将Flannel配置文件应用到Kubernetes集群中:
kubectl apply -f flannel.yaml这会将Flannel配置文件中定义的ConfigMap创建到Kubernetes集群的kube-system命名空间中。检查Flannel是否正常工作。可以使用以下命令检查:
kubectl get pods --all-namespaces
如果看到Flannel相关的pod处于Running状态,则表示Flannel已经正常工作。

踩坑必备:

安装的Calico网络插件是3.19.4的镜像,存在以下问题:
1: 在 Kubernetes 1.19 版本中,calico/node v3.19.4 存在一个已知问题,会导致节点上的所有Pod无法与其它节点上的Pod通信。该问题在calico/node v3.19.5中已修复。2:在 Kubernetes 1.21 版本中,calico/node v3.19.4 存在一个已知问题,会导致集群中出现大量的gc go routines,可能会导致节点变慢。该问题在calico/node v3.19.5中已修复。建议尽快升级到 calico/node v3.19.5 或更高版本,以避免以上问题

升级步骤:

检查当前集群中 Calico 的版本:
kubectl get daemonset calico-node -n kube-system -o=jsonpath='{.spec.template.spec.containers[0].image}{"\n"}'停止当前版本的 Calico:kubectl delete -f https://docs.projectcalico.org/v3.19/manifests/calico.yaml修改 calico-node 镜像版本为 3.20.6 并保存到 calico.yaml 文件
讲calico.yaml文件下载下来: wget https://docs.projectcalico.org/v3.19/manifests/calico.yaml
sed -i 's|image: .*calico-node:.*|image: calico/node:v3.20.6|' calico.yaml安装3.20.6 版本的 Calico:kubectl apply -f calico.yaml

http://www.ppmy.cn/news/56828.html

相关文章

实例搞定MATLAB界面编程

MATLAB界面编程可以使用MATLAB自带的GUI开发环境&#xff08;GUIDE&#xff09;或手动编写代码进行开发。下面是一个使用GUIDE创建MATLAB界面的简单实例&#xff1a; 1. 打开MATLAB软件&#xff0c;点击主界面上的“APP设计器”按钮&#xff0c;打开GUIDE界面。 2. 在GUIDE界…

Android Java 音频采集 AudioRecord

在 Android Java 应用中&#xff0c;一般用 AudioRecord 管理从平台的音频输入设备采集音频数据所需的资源。音频采集和音频播放密切关系&#xff0c;Android 系统中 Java AudioRecord 和 AudioTrack 在许多方面&#xff0c;都有着很高的相似性&#xff0c;无论是代码的目录组织…

卷积神经网络详解

&#xff08;一&#xff09;网络结构 一个卷积神经网络里包括5部分——输入层、若干个卷积操作和池化层结合的部分、全局平均池化层、输出层&#xff1a; ● 输入层&#xff1a;将每个像素代表一个特征节点输入进来。 ● 卷积操作部分&#xff1a;由多个滤波器组合的卷积层。 …

JSP设计班级学生管理系统论文

第1章 绪论 1&#xff0e;1 引言 Internet已经成为人们生活、工作、学习越来越离不开的平台。Web技术已经不在局限于单纯地提供信息服务&#xff0c;而是日益成为一个操作平台&#xff0c;为用户提供强大的服务功能。例如网上电子商务、社会信息数据库等。网络实现了远程通讯…

人群计数主流创新方向梳理

#「持之以恒」挑战赛-30天技术创作养成记&#xff01;# Crowd counting的定义&#xff1a;Crowd counting is known as technique to count or estimate the total crowd present in in an image or a video stream. 母任务&#xff1a;The goal of Object Counting is to c…

关于python异常的总结

Python异常是在程序执行时发生的错误&#xff0c;可能会导致程序终止运行。 在Python中&#xff0c;异常处理是一种机制&#xff0c;它允许开发人员在程序发生异常时捕获、处理和报告这些异常&#xff0c;以便程序可以继续运行或在出现异常时进行优雅的退出。 在Python中&…

如何使用递归函数实现Excel列号转换列标

在Excel中&#xff0c;列标与列号转换是VBA开发过程中经常用到的功能&#xff0c;下面这篇博客为大家解释了多种方法。 【Excel列标与列号转换】 那么这篇博文的核心是“递归过程”&#xff0c;实现这个功能并不是必须使用递归过程&#xff0c;但是这也不失为一种实现方法&am…

K8S第二讲 Kubernetes集群简易版搭建步骤

安装前准备 关闭防火墙 systemctl stop firewalld systemctl disable firewalld关闭 selinux sed -i s/enforcing/disabled/ /etc/selinux/config # 永久关闭 setenforce 0 # 临时关闭关闭 swap swapoff -a # 临时关闭 vim /etc/fstab # 永久关闭 #注释掉swap这行 # /dev/mapp…