温馨提示×

Ubuntu Kubernetes 网络如何配置

小樊
49
2025-10-08 03:45:50
栏目: 智能运维

Ubuntu上Kubernetes网络配置指南
在Ubuntu上配置Kubernetes网络的核心是通过网络插件实现Pod间通信、Service暴露及网络策略控制。以下是详细步骤:

1. 准备基础环境

  • 操作系统要求:使用Ubuntu 20.04及以上版本(内核≥5.4,支持eBPF等特性)。
  • 硬件要求:节点需满足至少2GB RAM、2核CPU、20GB磁盘空间。
  • 网络要求:所有节点(Master/Worker)之间网络互通,关闭防火墙或放行Kubernetes组件端口(如API Server的6443端口、kubelet的10250端口)。
  • 容器运行时:安装Docker(推荐)或其他兼容运行时(如containerd),并配置Docker使用systemd作为cgroup驱动(编辑/etc/docker/daemon.json添加"exec-opts": ["native.cgroupdriver=systemd"],重启Docker服务)。

2. 安装Kubernetes核心组件

在所有节点上执行以下命令安装kubeletkubeadmkubectl(避免自动升级,防止插件兼容性问题):

sudo apt update
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  # 锁定版本

初始化Master节点(生成集群配置):

sudo kubeadm init --pod-network-cidr=10.244.0.0/16  # 指定Pod网段(需与后续网络插件一致)

初始化完成后,按提示配置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. 安装网络插件(关键步骤)

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

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

Calico基于BGP协议,提供三层网络与细粒度安全策略,适合中大规模生产环境。

  • 安装步骤
    kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml
    
    • 参数调整:若Pod网段非默认192.168.0.0/16,需修改calico.yaml中的CALICO_IPV4POOL_CIDR(如改为10.244.0.0/16);若节点使用双网卡,添加IP_AUTODETECTION_METHOD: "interface=eth0"(替换为实际主网卡名称)。

② Flannel(轻量稳定,适合开发测试)

Flannel采用Overlay网络(VXLAN/Host-GW),配置简单,资源消耗低。

  • 安装步骤
    curl -O https://raw.githubusercontent.com/flannel-io/flannel/v0.22.0/Documentation/kube-flannel.yml
    kubectl apply -f kube-flannel.yml
    
    • 性能优化:若节点在同一局域网,可将后端从vxlan改为host-gw(修改kube-flannel.yml中的net-conf.json,将"Type": "vxlan"改为"Type": "host-gw"),提升网络性能。

③ Cilium(高性能,基于eBPF)

Cilium利用eBPF技术实现高效网络转发与策略控制,适合大规模集群与高频交易场景。

  • 安装步骤(需Helm):
    # 安装Helm
    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
    chmod 700 get_helm.sh
    ./get_helm.sh
    # 添加Cilium仓库并部署
    helm repo add cilium https://helm.cilium.io/
    helm repo update
    helm install cilium cilium/cilium --namespace kube-system \
      --set k8sServiceHost=<K8S_API_SERVER_IP> \
      --set k8sServicePort=6443 \
      --set kubeProxyReplacement=true  # 替换kube-proxy
    

4. 验证网络插件

  • 检查Pod状态:确保网络插件相关Pod均在Running状态:
    kubectl get pods -n kube-system | grep -E 'calico|flannel|cilium'
    
  • 测试Pod通信
    1. 创建测试Pod:
      kubectl run nginx --image=nginx --port=80 --rm -it -- /bin/sh
      
    2. 获取Pod IP(在另一个终端执行):
      POD_IP=$(kubectl get pod nginx -o jsonpath='{.status.podIP}')
      
    3. 从当前Pod访问测试Pod:
      wget -qO- http://$POD_IP
      
    若能正常访问,说明网络插件配置成功。

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

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

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-same-namespace
  namespace: default
spec:
  podSelector: {}  # 选择所有Pod
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - podSelector: {}  # 允许同一命名空间的Pod访问
  egress:
  - to:
    - podSelector: {}  # 允许访问同一命名空间的Pod

应用策略:

kubectl apply -f network-policy.yaml

注意事项

  • 插件兼容性:确保网络插件版本与Kubernetes集群版本匹配(如Calico 3.26支持Kubernetes 1.27+)。
  • Pod网段一致性kubeadm init中的--pod-network-cidr需与网络插件配置中的Pod网段一致(如10.244.0.0/16)。
  • 节点加入集群:Worker节点需使用kubeadm join命令(初始化时生成的命令)加入集群,确保节点状态为Ready

0