如何在Ubuntu上搭建Kubernetes网络
在Ubuntu上搭建Kubernetes网络的完整步骤
1. 基础环境准备
1.1 关闭Swap分区
Kubernetes不支持Swap,需禁用以避免网络组件异常:
sudo swapoff -a # 临时关闭
sudo sed -i '/ swap / s/1/g' /etc/fstab # 永久注释Swap行
1.2 加载内核模块
启用overlay(支持容器镜像层叠加)和br_netfilter(允许网桥转发流量)模块:
sudo modprobe overlay
sudo modprobe br_netfilter
1.3 配置内核参数
设置IP转发和iptables规则,确保Pod间网络互通:
cat <
<
EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
EOF
sudo sysctl --system # 生效配置
1.4 安装Docker容器运行时
Kubernetes依赖容器运行时,推荐使用Docker(需版本≥18.09):
sudo apt update &
&
sudo apt install -y docker.io
sudo systemctl enable --now docker # 启用并启动Docker
1.5 安装Kubernetes核心组件
添加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 # 锁定版本避免自动升级
2. 初始化Kubernetes集群(Master节点)
仅在Master节点执行,初始化集群时需指定Pod网络CIDR(与后续网络插件网段一致,如10.244.0.0/16):
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
初始化完成后,记录输出的kubeadm join命令(用于后续将Worker节点加入集群)。
3. 配置kubectl
将集群配置复制到当前用户目录,方便本地管理:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4. 安装网络插件(关键步骤)
Kubernetes需通过网络插件实现Pod跨节点通信,以下为主流插件安装指南:
4.1 Calico(企业级,支持网络策略)
Calico基于BGP协议,提供高性能三层网络及细粒度安全策略,适合中大规模生产环境:
# 下载Calico清单(默认适配Pod网段192.168.0.0/16,需修改为集群实际网段)
curl -O https://docs.projectcalico.org/v3.26/manifests/calico.yaml
# 编辑calico.yaml,找到CALICO_IPV4POOL_CIDR字段,修改为集群Pod网段(如10.244.0.0/16)
sed -i 's/CALICO_IPV4POOL_CIDR: "192.168.0.0\/16"/CALICO_IPV4POOL_CIDR: "10.244.0.0\/16"/' calico.yaml
# 部署插件
kubectl apply -f calico.yaml
# 验证状态(所有Pod应为Running)
kubectl get pods -n calico-system
4.2 Flannel(轻量稳定,适合中小规模)
Flannel采用Overlay网络(VXLAN),配置简单,适合开发测试或小规模集群:
# 下载Flannel清单
curl -O https://raw.githubusercontent.com/flannel-io/flannel/v0.22.0/Documentation/kube-flannel.yml
# (可选)切换为Host-GW后端(同一局域网内性能更优)
sed -i 's/"Type": "vxlan"/"Type": "host-gw"/' kube-flannel.yml
# 部署插件
kubectl apply -f kube-flannel.yml
# 验证状态
kubectl get pods -n kube-flannel
4.3 Cilium(eBPF加速,高性能场景)
Cilium基于eBPF技术,性能远超传统插件,适合高频交易、大流量电商等场景(需内核≥5.4):
# 安装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(替换<
K8S_API_SERVER_IP>
为集群API Server IP)
helm install cilium cilium/cilium \
--namespace kube-system \
--set k8sServiceHost=<
K8S_API_SERVER_IP>
\
--set k8sServicePort=6443 \
--set kubeProxyReplacement=true # 自动替换kube-proxy
# 验证状态(所有Cilium Pod应为Running,EBPF状态为enabled)
kubectl get pods -n kube-system -l k8s-app=cilium
kubectl exec -n kube-system cilium-xxxx -- cilium status
5. 验证网络配置
5.1 检查节点状态
确保Master和Worker节点均为Ready:
kubectl get nodes
5.2 测试Pod网络连通性
创建测试Pod并验证跨节点通信:
# 创建Nginx Pod
kubectl run nginx --image=nginx --port=80
# 创建Redis Pod
kubectl run redis --image=redis --port=6379
# 获取Pod IP(需等待Pod状态为Running)
NGINX_POD_IP=$(kubectl get pod nginx -o jsonpath='{
.status.podIP}
')
REDIS_POD_IP=$(kubectl get pod redis -o jsonpath='{
.status.podIP}
')
# 在Nginx Pod中curl Redis Pod(跨节点需等待网络同步)
kubectl exec -it nginx -- curl -v http://$REDIS_POD_IP:6379
6. 配置网络策略(可选)
通过网络策略限制Pod间通信,提升安全性(以Calico为例):
# 创建network-policy.yaml文件
cat <
<
EOF >
network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-same-namespace
spec:
podSelector: {
}
# 选择所有Pod
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector: {
}
# 允许同一命名空间内的Pod访问
egress:
- to:
- podSelector: {
}
# 允许访问同一命名空间内的Pod
EOF
# 应用策略
kubectl apply -f network-policy.yaml
通过以上步骤,即可在Ubuntu上完成Kubernetes网络的搭建与验证。需根据实际环境调整网络插件配置(如Pod网段、后端类型),并参考插件官方文档优化性能。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu上搭建Kubernetes网络
本文地址: https://pptw.com/jishu/735570.html
