在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/16
natOutgoing: 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/16
natOutgoing: 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-cfg
namespace: 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已经正常工作。
踩坑必备:文章来源:https://www.toymoban.com/news/detail-492731.html
安装的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 或更高版本,以避免以上问题
升级步骤:文章来源地址https://www.toymoban.com/news/detail-492731.html
检查当前集群中 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
到了这里,关于K8S第三讲 Kubernetes集群配置网络插件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!