ubuntu上k8s网络如何配置
导读:Ubuntu 上 Kubernetes 网络配置实操指南 一 前置条件与系统网络准备 关闭交换分区并持久化:执行swapoff -a,并将 /etc/fstab 中的 swap 挂载行注释,避免 kubelet 报错。 加载内核模块并开启...
Ubuntu 上 Kubernetes 网络配置实操指南
一 前置条件与系统网络准备
- 关闭交换分区并持久化:执行swapoff -a,并将 /etc/fstab 中的 swap 挂载行注释,避免 kubelet 报错。
- 加载内核模块并开启桥接与转发:
- 模块:加载 overlay、br_netfilter
- echo -e “overlay\nbr_netfilter” | sudo tee /etc/modules-load.d/k8s.conf
- sudo modprobe overlay & & sudo modprobe br_netfilter
- Sysctl:开启桥接流量进入 iptables、开启 IPv4 转发
- echo -e “net.bridge.bridge-nf-call-iptables = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.ipv4.ip_forward = 1” | sudo tee /etc/sysctl.d/k8s.conf
- sudo sysctl --system
- 模块:加载 overlay、br_netfilter
- 容器运行时与 cgroup 驱动:以 Docker 为例,配置 native.cgroupdriver=systemd,存储驱动用 overlay2,并重启服务。
- 防火墙与安全组:测试环境可临时关闭 ufw;生产环境请按需放行 6443/10250/8472(UDP,VXLAN)/30000-32767(NodePort) 等端口。
- 主机名与解析:为各节点设置唯一 hostname,并在 /etc/hosts 中完成内网解析,便于集群通信与排障。
二 初始化集群与 Pod 网段规划
- 安装组件:在所有节点安装 kubeadm/kubelet/kubectl,并建议执行 sudo apt-mark hold kubelet kubeadm kubectl 防止意外升级。
- 初始化控制平面(只在 master 执行):指定与所选网络插件匹配的 Pod CIDR。例如使用 Flannel 时常用 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
- 工作节点加入:在 master 上获取 kubeadm join 命令并执行,完成后在 master 检查 kubectl get nodes。
三 安装网络插件
- 选择插件与 CIDR 对齐:确保 –pod-network-cidr 与插件默认网段一致;如使用 Calico 可改为 192.168.0.0/16 并在自定义资源中设置。
- 常用插件一键部署示例:
| 插件 | 适用场景 | 安装命令示例 | 备注 |
|---|---|---|---|
| Flannel | 快速上手、小型或测试集群 | kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml | 默认使用 10.244.0.0/16;若自定义 CIDR,需同步修改 flannel 配置 |
| Calico | 需要网络策略、跨主机高性能 | kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml & & kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml | 可在 custom-resources.yaml 中设置 CALICO_IPV4POOL_CIDR |
| Cilium | 追求 eBPF 高性能、可观测与策略 | 参考官方安装文档(cilium-cli) | 支持 BPF、服务网格等高级能力,学习曲线略陡 |
- 验证插件就绪:
- watch kubectl get pods -n kube-system
- kubectl get nodes(状态应为 Ready)
四 验证与连通性测试
- 基本连通性:
- kubectl run nginx --image=nginx --port=80
- kubectl expose deployment nginx --port=80 --type=NodePort
- kubectl get pod,svc
- 在集群内访问 ClusterIP 或通过节点 IP 与 NodePort 访问服务
- 跨节点验证:在不同节点上分别部署 busybox 或临时容器,互相 ping Pod IP、解析 Service DNS,确认跨主机网络与 kube-proxy 正常。
五 常见问题与网络策略
- 节点 NotReady:优先检查 kubelet 状态(sudo systemctl restart kubelet)、容器运行时、以及网络插件 Pod 是否全部 Running;确认 Pod CIDR 与插件配置一致。
- 无法拉取镜像:在受限网络环境预先 docker pull 所需镜像并 tag 为插件清单中指定的镜像名,或使用国内镜像源。
- 策略与安全:如需最小暴露面,启用 NetworkPolicy 控制 Ingress/Egress 流量;例如仅允许访问某 CIDR 的出站流量:
- apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-egress-to-172-17
spec:
podSelector:
matchLabels:
app: my-app
policyTypes:- Egress
egress: - to:
- ipBlock:
cidr: 172.17.0.0/16
- ipBlock:
- Egress
- apiVersion: networking.k8s.io/v1
- 端口与防火墙:生产环境请按需放行 6443(API)、10250(kubelet)、8472/UDP(VXLAN,Flannel)、30000-32767(NodePort),避免策略阻断导致节点 NotReady 或服务不可达。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu上k8s网络如何配置
本文地址: https://pptw.com/jishu/762576.html
