cluster_网络

cluster 网络

image

service 网络

当service和endpoint被创建时,kube-proxy会自动创建相应的转发规则,使得访问service的请求被转发到endpoint

kube-api-server --service-cluster-ip-range ipNet(Default:10.0.0.0/24)

修改MTU

Kubenet支持用户使用Kubelet的--network-plugin-mtu参数指定MTU

--network-plugin-mtu=8873

带宽控制

设置Pod的上传和下载的最高带宽

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  annotations:
    kubernetes.io/ingress-bandwidth: 1M
    kubernetes.io/egress-bandwidth: 1M
spec:
  containers:
  - name: nginx
    image: nginx:latest

安装CNI插件

Kubelet和CNI给出了两个默认的文件系统路径

  • /etc/cni/net.d 用来存储CNI配置文件
  • /opt/cni/bin 目录用来存放CNI插件的二进制文件

在Kubernetes中使用CNI

  • Kubelet要使用CNI网络驱动需要配置启动参数--network-plugin=cni。
  • Kubelet从--cni-conf-dir(默认为/etc/cni/net.d)中读取文件,并使用该文件中的CNI配置配置每个Pod网络。
  • 如果目录中有多个CNI配置文件,则使用文件名字典序列中的第一个文件

host-local 和 bridge 插件

#安装插件
mkdir -p /opt/cni/bin
curl -L https://github.com/containernetworking/plugins/releases/download/v1.0.1/cni-plugins-linux-amd64-v1.0.1.tgz | tar -xz -C /opt/cni/bin

#配置 host-local 和 bridge 插件
在每个节点的 /etc/cni/net.d/ 目录中创建一个 CNI 配置文件
vim /etc/cni/net.d/10-bridge.conf
{
  "cniVersion": "0.4.0",
  "name": "mynet",
  "type": "bridge",                 # 定义 bridge 类型的网络
  "bridge": "cni0",
  "isGateway": true,
  "isDefaultGateway": true,
  "ipMasq": true,
  "ipam": {
    "type": "host-local",           # 使用 host-local 插件进行 IP 地址管理
    "subnet": "10.22.0.0/16",
    "rangeStart": "10.22.0.20",
    "rangeEnd": "10.22.255.200",
    "routes": [
      { "dst": "0.0.0.0/0" }
    ]
  }
}

ls /opt/cni/bin             # 输出应该包含 bridge 和 host-local 等 CNI 插件
systemctl restart kubelet   # 为了使新的 CNI 配置文件生效,重启每个节点上的 Kubelet 服务

#验证 CNI 配置
创建一个测试 Pod,Pod 的 IP 地址应该在 10.22.0.0/16 子网内
vim test-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["sleep", "300"]

kubectl apply -f test-pod.yaml
kubectl get pod test-pod -o wide

安装和配置 Flannel

Flannel 是一个简单易用的 CNI 插件,适合小型到中型集群。

--使用以下命令从官方提供的清单文件中安装 Flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

--确保 Flannel DaemonSet 已成功创建,并且 Pod 正常运行
kubectl get daemonset kube-flannel-ds -n kube-system
kubectl get pods -n kube-system -l app=flannel

安装和配置 Calico

Calico 提供更丰富的网络功能和网络策略控制,适合中大型集群

使用以下命令从官方提供的清单文件中安装 Calico
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

确保 Calico DaemonSet 已成功创建,并且 Pod 正常运行
kubectl get daemonset calico-node -n kube-system
kubectl get pods -n kube-system -l k8s-app=calico-node

安装和配置 Weave

Weave 提供一个功能强大的网络解决方案,支持加密和多种网络拓扑。

--使用以下命令从官方提供的 URL 中安装 Weave
kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')

--确保 Weave DaemonSet 已成功创建,并且 Pod 正常运行
kubectl get daemonset weave-net -n kube-system
kubectl get pods -n kube-system -l name=weave-net

配置网络策略

创建一个简单的网络策略只允许特定的 Pod 访问前端

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: frontend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: backend

kubectl apply -f your-network-policy.yaml
posted @   立勋  阅读(5)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示