温馨提示×

Kubernetes在Ubuntu上如何配置网络

小樊
53
2025-10-18 17:39:55
栏目: 智能运维

Kubernetes在Ubuntu上的网络配置指南

在Ubuntu上配置Kubernetes网络需完成基础环境准备集群初始化网络插件安装验证与调优四大核心步骤,以下是详细操作流程:

一、基础环境准备

1. 关闭Swap分区

Kubernetes不支持Swap,需禁用以避免网络组件异常:

sudo swapoff -a  # 临时关闭
sudo sed -i '/ swap / s/^\(.*\)$/#\1/' /etc/fstab  # 永久禁用(注释fstab中的Swap行)

2. 加载必要内核模块

启用网桥转发和IPTables支持,确保网络流量正常转发:

sudo modprobe overlay  # 加载overlay模块(支持容器网络)
sudo modprobe br_netfilter  # 加载br_netfilter模块(支持网桥网络)

3. 配置内核参数

通过sysctl设置IP转发和网桥规则,允许Pod间直接通信:

sudo tee /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables=1  # 允许iptables处理网桥流量
net.bridge.bridge-nf-call-ip6tables=1 # 支持IPv6
net.ipv4.ip_forward=1                 # 开启IP转发
EOF
sudo sysctl --system  # 应用配置

4. 安装Docker与Kubernetes组件

  • 安装Docker(容器运行时,Kubernetes依赖):
    sudo apt update && sudo apt install -y docker.io
    sudo systemctl enable --now docker  # 启用并启动Docker
    
  • 安装Kubernetes核心组件(kubelet、kubeadm、kubectl):
    sudo apt install -y apt-transport-https curl
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo apt update
    sudo apt install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl  # 锁定版本避免自动升级
    

二、初始化Kubernetes集群

仅在Master节点执行以下命令,初始化集群时需指定Pod网络CIDR(需与后续网络插件的网段一致,如10.244.0.0/16):

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

初始化完成后,配置kubectl以连接集群:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

三、安装网络插件(关键步骤)

Kubernetes需通过网络插件实现Pod跨节点通信,常见插件及安装流程如下:

1. Calico(推荐,企业级)

Calico基于BGP协议,提供高性能三层网络及细粒度安全策略(如NetworkPolicy),适合中大规模生产环境。

  • 安装Calico
    curl -O https://docs.projectcalico.org/v3.26/manifests/calico.yaml
    kubectl apply -f calico.yaml
    
  • 自定义配置(可选): 若集群Pod网段非默认192.168.0.0/16,需编辑calico.yaml,搜索CALICO_IPV4POOL_CIDR修改为集群实际网段(如10.244.0.0/16);若节点使用双网卡,添加IP_AUTODETECTION_METHOD指定主网卡(如interface=eth0)。

2. Flannel(简单易用,适合中小集群)

Flannel是轻量级覆盖网络插件,配置简单,适合快速搭建小型集群。

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

3. Weave Net(自动配置,支持加密)

Weave Net无需额外配置,自动发现节点并创建覆盖网络,支持数据加密。

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

四、验证与调优

1. 检查网络插件状态

确保网络插件相关Pod均在Running状态:

kubectl get pods -n kube-system

2. 测试Pod网络连通性

  • 创建测试Pod
    kubectl run nginx --image=nginx --restart=Never --rm -it -- /bin/sh
    
  • 验证内部通信: 在Pod内执行pingwget测试与其他Pod的连通性(需提前创建其他Pod)。

3. 配置网络策略(可选,增强安全性)

通过Calico等插件配置NetworkPolicy,限制Pod间通信(如仅允许特定标签的Pod访问):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: example-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: my-app  # 选择目标Pod
  policyTypes:
  - Ingress      # 控制入站流量
  - Egress       # 控制出站流量
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend  # 仅允许带"role=frontend"标签的Pod访问
    ports:
    - protocol: TCP
      port: 80
  egress:
  - to:
    - ipBlock:
        cidr: 172.17.0.0/16  # 仅允许访问外部172.17.0.0/16网段
    ports:
    - protocol: TCP
      port: 80

注意事项

  • 插件选择:Calico适合大规模生产环境(支持网络策略、高性能);Flannel适合中小集群(简单易用);Weave Net适合快速部署(自动配置)。
  • Pod CIDR一致性:初始化集群时的--pod-network-cidr需与网络插件的网段一致,否则会导致网络不通。
  • 生产环境优化:关闭防火墙(sudo ufw disable)仅用于测试,生产环境需配置精确的iptables规则;定期监控网络插件状态(如kubectl get pods -n calico-system)。

0