公私云K8s跨区域网络访问延迟优化
技术栈:Kubernetes v1.32.13 + Rocky Linux 8.6 + 公私云网络 + Containerd 1.7.x
操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案
公私云K8s跨区域网络访问延迟优化
操作环境
K8s 集群环境:私有云自建集群(k8s-master 192.168.1.10, k8s-node1 192.168.1.11, k8s-node2 192.168.1.12)+ 公有云托管K8s(ACK/TKE/CCE),K8s 版本 v1.32.13
公私云对接场景:公私云网络体系适配,已部署私有云K8s集群和公有云托管K8s集群,跨云网络已打通(专线/VPN),统一管理平台已配置
操作系统 Rocky Linux 8.6,容器运行时 Containerd 1.7.x,网络插件 Calico,存储已配置LocalPV/NFS/云盘
已配置跨云统一监控(Prometheus+Grafana)、统一日志(ELK/EFK)、统一链路追踪(SkyWalking/OpenTelemetry)
已配置跨云统一CI/CD流水线(Jenkins/GitLab CI/ArgoCD)、统一镜像仓库(Harbor)、统一权限体系(RBAC/SSO)
对接原理
公私云K8s跨区域网络访问延迟优化是 K8s 公有云私有云资源对接中的核心操作场景。公私云资源对接旨在实现私有云自建K8s与公有云托管K8s的统一管理、统一运维、统一监控、统一安全、统一成本管控,解决多云架构下的架构差异、网络差异、存储差异、权限差异、运维差异等问题。公私云网络体系适配作为公私云对接的具体领域,负责架构选型、网络适配、存储适配、安全权限、监控运维、迁移割接、高可用容灾、成本优化、自动化运维等核心能力。运维操作的核心目标是确保公私云集群的高可用、业务连续性、数据安全性、成本可控性:通过规范化的架构选型确保公私云适配,通过统一的网络存储适配确保跨云通信和数据共享,通过统一的安全权限体系确保跨云安全合规,通过统一的监控运维体系确保跨云可观测,通过合理的成本优化确保资源利用率,通过高可用容灾确保业务连续性,通过自动化运维提升效率。所有操作需遵循业务无感知原则,对公私云资源的变更采用灰度和滚动方式,避免影响业务。
详细步骤
1. 公私云现状盘点与集群状态检查
# 1. 检查私有云K8s集群状态 kubectl get nodes -o wide --context=private-cloud kubectl get pods -A -o wide --context=private-cloud | head -30 # 2. 检查公有云K8s集群状态 kubectl get nodes -o wide --context=public-cloud kubectl get pods -A -o wide --context=public-cloud | head -30 # 3. 检查跨云网络连通性 # 从私有云节点ping公有云节点 ping -c 3 <public-cloud-node-ip> # 检查专线/VPN状态 ip route | grep -E 'public|vpn|专线' # 检查跨云端口连通性 telnet <public-cloud-node-ip> 6443 nc -zv <public-cloud-node-ip> 10250 # 4. 检查跨云DNS解析 nslookup <public-cloud-service>.<namespace>.svc.cluster.local # 检查CoreDNS配置 kubectl get cm coredns -n kube-system --context=private-cloud -o yaml | head -50 # 5. 检查跨云镜像仓库 # 检查Harbor curl -s https://harbor.example.com/api/v2.0/health # 检查镜像同步 # kubectl exec -n harbor harbor-core-0 -- curl -s http://localhost:8080/api/v2.0/replications # 6. 检查跨云统一监控 # 检查Prometheus联邦 kubectl get cm -n monitoring prometheus-config --context=private-cloud -o yaml | grep -A10 'remote_write\|federation' # 检查Grafana多数据源 kubectl get cm -n monitoring grafana-datasources --context=private-cloud -o yaml | head -50 # 7. 检查跨云统一日志 # 检查日志采集 kubectl get pods -n logging --context=private-cloud kubectl get pods -n logging --context=public-cloud # 检查Elasticsearch kubectl exec -n logging elasticsearch-0 -- curl -s http://localhost:9200/_cluster/health # 8. 检查跨云权限体系 # 检查RBAC kubectl get clusterrolebinding --context=private-cloud | head -20 kubectl get clusterrolebinding --context=public-cloud | head -20 # 检查SSO/统一认证 kubectl get cm -n kube-system oidc-config --context=private-cloud -o yaml 2>/dev/null | head -30 # 9. 导出配置备份 kubectl get all -A -o yaml --context=private-cloud > /tmp/private_cloud_state_$(date +%Y%m%d).yaml kubectl get all -A -o yaml --context=public-cloud > /tmp/public_cloud_state_$(date +%Y%m%d).yaml echo "公私云配置已备份到 /tmp/"
2. 制定操作方案与备份防护
# 1. 备份公私云配置(操作前必做) kubectl get cm -A -o yaml --context=private-cloud > /tmp/private_cm_backup_$(date +%Y%m%d_%H%M%S).yaml kubectl get secret -A -o yaml --context=private-cloud > /tmp/private_secret_backup_$(date +%Y%m%d_%H%M%S).yaml kubectl get deployment,statefulset,daemonset -A -o yaml --context=private-cloud > /tmp/private_workload_backup_$(date +%Y%m%d_%H%M%S).yaml kubectl get cm -A -o yaml --context=public-cloud > /tmp/public_cm_backup_$(date +%Y%m%d_%H%M%S).yaml kubectl get secret -A -o yaml --context=public-cloud > /tmp/public_secret_backup_$(date +%Y%m%d_%H%M%S).yaml kubectl get deployment,statefulset,daemonset -A -o yaml --context=public-cloud > /tmp/public_workload_backup_$(date +%Y%m%d_%H%M%S).yaml # 2. 记录当前公私云状态 echo "=== 公私云状态记录 $(date) ===" > /tmp/cloud_status_$(date +%Y%m%d).txt echo "--- 私有云节点 ---" >> /tmp/cloud_status_$(date +%Y%m%d).txt kubectl get nodes -o wide --context=private-cloud >> /tmp/cloud_status_$(date +%Y%m%d).txt echo "--- 公有云节点 ---" >> /tmp/cloud_status_$(date +%Y%m%d).txt kubectl get nodes -o wide --context=public-cloud >> /tmp/cloud_status_$(date +%Y%m%d).txt echo "--- 跨云网络 ---" >> /tmp/cloud_status_$(date +%Y%m%d).txt ping -c 3 <public-cloud-node-ip> >> /tmp/cloud_status_$(date +%Y%m%d).txt 2>&1 cat /tmp/cloud_status_$(date +%Y%m%d).txt # 3. 制定操作方案 cat > /tmp/cloud_operation_plan.md << 'EOF' # 公私云操作方案 ## 一、操作目标 ## 二、影响范围评估 ## 三、操作步骤与时间窗口 ## 四、回滚方案 ## 五、验证标准 ## 六、风险点与应对措施 EOF echo "操作方案模板已创建" # 4. 确认业务窗口 echo "当前时间: $(date)" echo "建议在业务低峰期执行公私云操作,避免影响业务" # 5. 通知相关业务方 # echo "公私云运维操作通知" | mail -s "公私云通知" admin@example.com
3. 执行公私云配置适配操作
# 1. 检查公私云架构差异 # 私有云控制平面 kubectl get pods -n kube-system --context=private-cloud | grep -E 'apiserver|controller|scheduler|etcd' # 公有云控制平面(托管,通常不可见) kubectl get nodes --context=public-cloud # 检查版本差异 kubectl version --context=private-cloud --short kubectl version --context=public-cloud --short # 2. 检查公私云网络适配 # 私有云网络 kubectl get cm -n kube-system calico-config --context=private-cloud -o yaml 2>/dev/null | head -30 # 公有云网络 kubectl get cm -n kube-system --context=public-cloud | grep -i 'calico\|flannel\|vpc' # 检查Service类型 kubectl get svc -A --context=private-cloud | grep LoadBalancer kubectl get svc -A --context=public-cloud | grep LoadBalancer # 3. 检查公私云存储适配 # 私有云StorageClass kubectl get storageclass --context=private-cloud # 公有云StorageClass kubectl get storageclass --context=public-cloud # 检查PV/PVC kubectl get pv --context=private-cloud | head -10 kubectl get pvc -A --context=public-cloud | head -10 # 4. 检查公私云权限适配 # 私有云RBAC kubectl get clusterrole --context=private-cloud | head -20 # 公有云RBAC kubectl get clusterrole --context=public-cloud | head -20 # 检查ServiceAccount kubectl get serviceaccount -A --context=private-cloud | head -10 kubectl get serviceaccount -A --context=public-cloud | head -10 # 5. 检查公私云监控适配 # 私有云监控 kubectl get pods -n monitoring --context=private-cloud # 公有云监控 kubectl get pods -n monitoring --context=public-cloud # 检查Prometheus联邦 kubectl get cm -n monitoring prometheus-config --context=private-cloud -o yaml | grep -A10 'remote_write\|federation' # 6. 执行具体公私云配置操作(根据标题调整) echo "执行公私云具体配置操作..." echo "请根据操作方案执行具体步骤" # 7. 应用公私云配置变更 # kubectl apply -f /tmp/cloud_config.yaml --context=private-cloud # kubectl apply -f /tmp/cloud_config.yaml --context=public-cloud # kubectl rollout restart deployment/<name> -n <namespace> --context=private-cloud # kubectl rollout restart deployment/<name> -n <namespace> --context=public-cloud # 8. 等待配置生效 kubectl rollout status deployment/<name> -n <namespace> --context=private-cloud --timeout=120s kubectl rollout status deployment/<name> -n <namespace> --context=public-cloud --timeout=120s echo "公私云配置变更完成"
4. 验证跨云连通性与业务无感知
# 1. 验证私有云集群状态 kubectl get nodes -o wide --context=private-cloud # 预期:所有节点 Ready # 2. 验证公有云集群状态 kubectl get nodes -o wide --context=public-cloud # 预期:所有节点 Ready # 3. 验证跨云网络连通性 ping -c 3 <public-cloud-node-ip> # 预期:网络连通 # 检查跨云服务访问 kubectl run -it --rm debug --image=busybox --restart=Never --context=private-cloud -- nslookup <public-cloud-service>.<namespace>.svc.cluster.local # 预期:DNS解析正常 # 4. 验证跨云镜像仓库 curl -s https://harbor.example.com/api/v2.0/health # 预期:Harbor健康 # 检查镜像同步 # kubectl exec -n harbor harbor-core-0 -- curl -s http://localhost:8080/api/v2.0/replications | jq '.[].status' # 5. 验证跨云统一监控 # 检查Prometheus指标 # kubectl port-forward -n monitoring svc/prometheus 9090:9090 --context=private-cloud & # sleep 5 # curl -s 'http://localhost:9090/api/v1/query?query=up' | jq '.data.result | length' # 预期:有公私云指标 # 6. 验证跨云统一日志 # 检查Elasticsearch kubectl exec -n logging elasticsearch-0 -- curl -s http://localhost:9200/_cluster/health | jq '.status' # 预期:green # 检查日志索引 kubectl exec -n logging elasticsearch-0 -- curl -s 'http://localhost:9200/_cat/indices?v' | head -20 # 7. 验证跨云权限 # 检查RBAC kubectl auth can-i get pods --as=<user> --context=private-cloud kubectl auth can-i get pods --as=<user> --context=public-cloud # 预期:权限符合预期 # 8. 验证业务服务 # 检查私有云业务 kubectl get pods -n <app-namespace> --context=private-cloud # 检查公有云业务 kubectl get pods -n <app-namespace> --context=public-cloud # 预期:业务正常运行 # 9. 清理调试资源 # kubectl delete pod debug --ignore-not-found --context=private-cloud # pkill -f "port-forward" 2>/dev/null echo "验证完成"
5. 公私云统一监控权限与成本配置
# 1. 配置公私云统一监控 # 检查Prometheus联邦配置 kubectl get cm -n monitoring prometheus-config --context=private-cloud -o yaml | grep -A10 'remote_write\|federation' # 配置Grafana多数据源 kubectl get cm -n monitoring grafana-datasources --context=private-cloud -o yaml | head -50 # 2. 配置公私云统一日志 # 检查日志采集配置 kubectl get cm -n logging -o name --context=private-cloud | head -10 # 检查Elasticsearch索引 kubectl exec -n logging elasticsearch-0 -- curl -s 'http://localhost:9200/_cat/indices?v' | head -20 # 3. 配置公私云统一权限 # 检查RBAC配置 kubectl get clusterrolebinding --context=private-cloud | head -20 kubectl get clusterrolebinding --context=public-cloud | head -20 # 检查SSO配置 kubectl get cm -n kube-system oidc-config --context=private-cloud -o yaml 2>/dev/null | head -30 # 4. 配置公私云统一CI/CD # 检查Jenkins/ArgoCD配置 kubectl get pods -n cicd --context=private-cloud kubectl get application -n argocd --context=private-cloud 2>/dev/null # 5. 配置公私云高可用容灾 # 检查备份策略 kubectl get cronjob -A --context=private-cloud | grep -i backup kubectl get cronjob -A --context=public-cloud | grep -i backup # 检查容灾配置 kubectl get volumesnapshot -A --context=private-cloud 2>/dev/null kubectl get volumesnapshot -A --context=public-cloud 2>/dev/null # 6. 配置公私云成本优化 # 检查资源标签 kubectl get nodes --show-labels --context=private-cloud | head -10 kubectl get nodes --show-labels --context=public-cloud | head -10 # 检查资源配额 kubectl get resourcequota -A --context=private-cloud kubectl get resourcequota -A --context=public-cloud # 7. 配置公私云安全合规 # 检查网络策略 kubectl get networkpolicy -A --context=private-cloud kubectl get networkpolicy -A --context=public-cloud # 检查安全上下文 kubectl get pods -A --context=private-cloud -o jsonpath='{.items[*].spec.securityContext}' | head -20 # 8. 配置公私云自动化运维 # 检查自动化脚本 kubectl get cronjob -A --context=private-cloud kubectl get cronjob -A --context=public-cloud # 检查GitOps配置 kubectl get kustomization -A --context=private-cloud 2>/dev/null kubectl get kustomization -A --context=public-cloud 2>/dev/null 6. 验证操作结果与生成报告
# 1. 最终验证私有云状态 kubectl get nodes -o wide --context=private-cloud # 预期:所有节点 Ready # 2. 最终验证公有云状态 kubectl get nodes -o wide --context=public-cloud # 预期:所有节点 Ready # 3. 验证跨云网络 ping -c 3 <public-cloud-node-ip> # 预期:网络连通 # 4. 验证跨云监控 # curl -s 'http://localhost:9090/api/v1/query?query=up' | jq '.data.result | length' # 预期:有公私云指标 # 5. 验证跨云日志 # kubectl exec -n logging elasticsearch-0 -- curl -s http://localhost:9200/_cluster/health | jq '.status' # 预期:green # 6. 验证跨云权限 # kubectl auth can-i get pods --as=<user> --context=private-cloud # 预期:权限符合预期 # 7. 验证业务服务 kubectl get pods -n <app-namespace> --context=private-cloud kubectl get pods -n <app-namespace> --context=public-cloud # 预期:业务正常 # 8. 生成操作报告 echo "=== 公私云操作报告 ===" > /tmp/cloud_operation_report.txt echo "操作时间: $(date)" >> /tmp/cloud_operation_report.txt echo "私有云节点数: $(kubectl get nodes --no-headers --context=private-cloud 2>/dev/null | wc -l)" >> /tmp/cloud_operation_report.txt echo "公有云节点数: $(kubectl get nodes --no-headers --context=public-cloud 2>/dev/null | wc -l)" >> /tmp/cloud_operation_report.txt echo "私有云异常Pod: $(kubectl get pods -A --no-headers --context=private-cloud 2>/dev/null | grep -v Running | grep -v NAME | wc -l)" >> /tmp/cloud_operation_report.txt echo "公有云异常Pod: $(kubectl get pods -A --no-headers --context=public-cloud 2>/dev/null | grep -v Running | grep -v NAME | wc -l)" >> /tmp/cloud_operation_report.txt cat /tmp/cloud_operation_report.txt # 9. 清理临时文件 # rm -f /tmp/cloud_*.yaml /tmp/cloud_*.txt 2>/dev/null # pkill -f "port-forward" 2>/dev/null echo "操作完成"
验证流程
# 1. 私有云状态验证 kubectl get nodes -o wide --context=private-cloud # 预期:所有节点 Ready # 2. 公有云状态验证 kubectl get nodes -o wide --context=public-cloud # 预期:所有节点 Ready # 3. 跨云网络验证 ping -c 3 <public-cloud-node-ip> # 预期:网络连通 # 4. 跨云监控验证 # curl -s 'http://localhost:9090/api/v1/query?query=up' | jq '.data.result | length' # 预期:有公私云指标 # 5. 跨云日志验证 # kubectl exec -n logging elasticsearch-0 -- curl -s http://localhost:9200/_cluster/health | jq '.status' # 预期:green # 6. 跨云权限验证 # kubectl auth can-i get pods --as=<user> --context=private-cloud # 预期:权限符合预期 # 7. 业务服务验证 kubectl get pods -n <app-namespace> --context=private-cloud kubectl get pods -n <app-namespace> --context=public-cloud # 预期:业务正常 # 8. 操作报告验证 cat /tmp/cloud_operation_report.txt # 预期:报告完整
排错方案
公私云Pod网络/Service网络差异:检查CNI插件、网络模型、网段规划、路由、隧道、VPC、子网、网络策略、性能
私有云跨节点网络不通网段冲突:检查Calico/Flannel配置、网段重叠、路由表、iptables、防火墙、节点网络、隧道、BGP
公有云VPC网段规划子网划分:检查VPC CIDR、子网划分、可用区、路由表、NAT网关、安全组、网络ACL、对等连接、专线
公私云ClusterIP/NodePort/LoadBalancer适配差异:检查Service类型、负载均衡、端口范围、外部IP、健康检查、会话保持、流量分发
私有云自建负载均衡高可用部署:检查HAProxy/Nginx/Keepalived、VIP漂移、健康检查、后端节点、会话保持、SSL卸载、性能
公有云SLB负载均衡对接K8s服务:检查SLB配置、监听、后端服务器、健康检查、会话保持、带宽、计费、高可用
公私云Ingress网关统一适配域名托管:检查Ingress Controller、域名、DNS、TLS证书、路径路由、限流、灰度、WAF
公私云网络策略NetworkPolicy统一管控:检查网络策略、入站出站、命名空间隔离、Pod标签、端口协议、默认策略、Calico策略