温馨提示×

Ubuntu Kubernetes网络配置如何实现

小樊
53
2025-10-06 03:27:05
栏目: 智能运维

Ubuntu上Kubernetes网络配置实现指南

在Ubuntu上配置Kubernetes网络需完成基础集群部署网络插件安装网络策略配置连通性验证四大核心步骤,以下是详细操作流程:

一、准备工作:安装Kubernetes基础组件

  1. 更新系统包
    执行sudo apt update && sudo apt upgrade -y,确保系统软件包为最新版本。

  2. 安装Docker容器运行时
    Kubernetes依赖容器运行时,推荐使用Docker(也可选择containerd):

    sudo apt install -y docker.io
    sudo systemctl enable --now docker  # 启用并启动Docker服务
    
  3. 安装Kubernetes核心组件
    添加Kubernetes官方APT仓库并安装kubeadm(集群初始化工具)、kubelet(节点代理)、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节点

  1. 初始化集群
    使用kubeadm初始化Master节点,必须指定--pod-network-cidr参数(与后续网络插件的Pod网段一致,常见值为10.244.0.0/16192.168.0.0/16):

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

    初始化完成后,会输出kubeadm join命令(用于Worker节点加入集群),请妥善保存。

  2. 配置kubectl
    将集群管理员配置复制到用户目录,使当前用户具备集群操作权限:

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  3. 验证Master节点状态
    执行kubectl get nodes,此时Master节点应处于NotReady状态(需等待网络插件部署后变为Ready)。

三、安装网络插件(核心步骤)

Kubernetes需通过网络插件实现Pod跨节点通信,以下是主流插件的安装指南:

1. Calico(企业级,支持网络策略)

Calico是基于BGP的三层网络插件,适用于中大规模生产环境,支持精细的Pod网络策略控制。

  • 安装步骤
    下载Calico官方YAML清单(适配最新版本):
    curl -O https://docs.projectcalico.org/v3.26/manifests/calico.yaml
    
    (可选)修改Pod网段:若集群Pod网段非默认的192.168.0.0/16,需编辑calico.yaml,搜索CALICO_IPV4POOL_CIDR并修改为集群实际网段(如10.244.0.0/16)。
    部署Calico组件:
    kubectl apply -f calico.yaml
    
  • 验证
    查看Calico Pod状态:kubectl get pods -n calico-system,所有Pod应为Running状态。

2. Flannel(轻量级,Overlay网络)

Flannel是入门级网络插件,配置简单,适合中小规模集群或开发测试环境,采用Overlay网络(VXLAN/Host-GW)实现通信。

  • 安装步骤
    下载Flannel YAML清单:
    curl -O https://raw.githubusercontent.com/flannel-io/flannel/v0.22.0/Documentation/kube-flannel.yml
    
    (可选)切换为Host-GW后端(提升同局域网性能):编辑kube-flannel.yml,搜索net-conf.json,将Backend.Typevxlan改为host-gw
    部署Flannel组件:
    kubectl apply -f kube-flannel.yml
    
  • 验证
    查看Flannel Pod状态:kubectl get pods -n kube-flannel,所有Pod应为Running状态。

3. Cilium(高性能,eBPF加速)

Cilium基于eBPF技术,提供极致网络性能(如百万级Pod并发),支持高级安全策略(如L7流量过滤),适合大规模或高性能场景(如高频交易、大流量电商)。

  • 前提条件
    节点内核版本≥5.4(Ubuntu 20.04+默认满足),禁用rp_filter(避免eBPF流量被拦截):
    echo "net.ipv4.conf.all.rp_filter=0" | sudo tee -a /etc/sysctl.conf
    echo "net.ipv4.conf.default.rp_filter=0" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
    
  • 安装步骤
    安装Helm(Kubernetes包管理工具):
    curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
    
    添加Cilium Helm仓库并更新:
    helm repo add cilium https://helm.cilium.io/
    helm repo update
    
    部署Cilium组件:
    helm install cilium cilium/cilium --namespace kube-system \
      --set k8sServiceHost=<K8S_API_SERVER_IP> \  # 替换为集群API Server IP
      --set k8sServicePort=6443                   # 默认6443
    
  • 验证
    查看Cilium Pod状态:kubectl get pods -n kube-system -l k8s-app=cilium,所有Pod应为Running状态;执行kubectl exec -n kube-system cilium-xxxx -- cilium status,输出应显示Status: readyEBPF: enabled

四、验证网络连通性

  1. 创建测试Pod
    部署一个Nginx Pod作为测试目标:

    kubectl run nginx --image=nginx --port=80 --rm -it --restart=Never
    

    执行ip a查看Pod IP(如10.244.1.2),退出Pod(输入exit)。

  2. 跨节点Pod通信
    在另一个节点创建Busybox Pod,尝试访问Nginx Pod的IP:

    kubectl run test-pod --image=busybox --rm -it --restart=Never -- wget -qO- http://<Nginx_Pod_IP>
    

    若返回Nginx欢迎页面(如<!DOCTYPE html>),则说明网络连通性正常。

五、可选:配置网络策略(增强安全性)

网络策略用于控制Pod之间的通信(如限制某命名空间的Pod只能访问特定端口),以Calico为例:

  1. 创建网络策略
    以下策略允许default命名空间内所有Pod互相访问,拒绝外部访问:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: default-deny-all
      namespace: default
    spec:
      podSelector: {}  # 匹配所有Pod
      policyTypes:
      - Ingress  # 控制入站流量
      - Egress   # 控制出站流量
      ingress: []  # 禁止所有入站流量
      egress: []   # 禁止所有出站流量
    

    应用策略:kubectl apply -f network-policy.yaml

  2. 测试策略效果
    尝试从default命名空间外的Pod访问default命名空间内的Pod,应无法访问;若需允许特定流量,可修改ingress/egress字段(如允许来自kube-system命名空间的流量)。

通过以上步骤,即可在Ubuntu上完成Kubernetes网络配置,实现Pod跨节点通信及安全策略控制。需根据实际场景选择合适的网络插件(如生产环境推荐Calico/Cilium,开发测试推荐Flannel)。

0