ubuntu

Kubernetes在Ubuntu上如何配置网络

小樊
54
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组件

二、初始化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),适合中大规模生产环境。

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网络连通性

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

注意事项

0
看了该问题的人还看了