新闻详情

新闻详情

首页 / 资讯中心 / 详情

K8s集群NodePort端口暴露配置规范实操

发布时间:2026/9/30 2:50:50来源:尧图网络
K8s集群NodePort端口暴露配置规范实操
K8s集群NodePort端口暴露配置规范实操技术栈Kubernetes v1.32.13 Rocky Linux 8.6 Service负载均衡 Containerd 1.7.x操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案K8s集群NodePort端口暴露配置规范实操操作环境K8s 集群 3 节点k8s-master(192.168.1.10), k8s-node1(192.168.1.11), k8s-node2(192.168.1.12)K8s 版本 v1.32.13网络组件Service负载均衡已部署对应网络组件 PodCNI 插件已配置容器运行时 Containerd 1.7.x操作系统 Rocky Linux 8.6内核版本已适配网络需求已加载必要内核模块br_netfilter、vxlan、ip_tables 等集群网络规划Pod 网段、Service 网段、节点网络已规划完毕无网段冲突DNS 服务正常运行已配置监控告警体系Prometheus Grafana网络指标可采集具备日志归集和故障排查能力对接原理K8s集群NodePort端口暴露配置规范实操是 K8s 集群网络系统运维中的核心操作场景。K8s 网络体系通过 CNIContainer Network Interface插件实现 Pod 网络的创建和管理网络组件负责集群内 Pod 间通信、Pod 与 Service 间通信、以及集群内外网络互通。Service负载均衡作为具体的网络组件为集群提供网络连通性、网络策略、负载均衡或入口路由能力。运维操作的核心目标是确保网络的可用性、性能、安全性和可管理性通过规范化的网络配置确保 Pod 间通信正常通过网络策略实现访问控制和安全隔离通过负载均衡和 Ingress 实现流量分发和外部访问通过监控告警和日志分析实现故障快速定位通过自动化脚本和 SOP 提升运维效率。所有操作需遵循业务无感知原则对生产网络的变更采用灰度和滚动方式避免影响业务运行。详细步骤1. 网络现状盘点与连通性检查# 1. 检查集群节点状态 kubectl get nodes -o wide kubectl get pods -n kube-system -o wide ​ # 2. 检查网络组件状态 kubectl get pods -n kube-system | grep -E flannel|calico|weave|kube-proxy|coredns|ingress|metallb|traefik kubectl get pods -A | grep -E flannel|calico|weave|kube-proxy|coredns|ingress|metallb|traefik ​ # 3. 检查网络连通性 # 节点间连通性 for node in k8s-master k8s-node1 k8s-node2; do echo 检查 $node kubectl get node $node -o jsonpath{.status.addresses[?(.typeInternalIP)].address} echo done ​ # Pod 间连通性测试 kubectl run net-test-1 --imagebusybox --restartNever -- sleep 3600 kubectl run net-test-2 --imagebusybox --restartNever -- sleep 3600 sleep 10 POD1_IP$(kubectl get pod net-test-1 -o jsonpath{.status.podIP}) POD2_IP$(kubectl get pod net-test-2 -o jsonpath{.status.podIP}) echo Pod1 IP: $POD1_IP echo Pod2 IP: $POD2_IP kubectl exec net-test-1 -- ping -c 3 $POD2_IP ​ # 4. 检查 DNS 解析 kubectl exec net-test-1 -- nslookup kubernetes.default.svc.cluster.local ​ # 5. 检查 Service 网络 kubectl get svc -A kubectl get endpoints -A ​ # 6. 导出网络配置 kubectl get pods -n kube-system -o yaml /tmp/network_pods_backup_$(date %Y%m%d).yaml kubectl get cm -n kube-system -o yaml /tmp/network_cm_backup_$(date %Y%m%d).yaml echo 网络配置已备份到 /tmp/ ​2. 制定操作方案与备份防护# 1. 备份当前网络配置操作前必做 kubectl get pods -n kube-system -o yaml /tmp/network_pods_backup_$(date %Y%m%d_%H%M%S).yaml kubectl get cm -n kube-system -o yaml /tmp/network_cm_backup_$(date %Y%m%d_%H%M%S).yaml kubectl get svc -A -o yaml /tmp/network_svc_backup_$(date %Y%m%d_%H%M%S).yaml kubectl get ingress -A -o yaml /tmp/network_ingress_backup_$(date %Y%m%d_%H%M%S).yaml kubectl get networkpolicy -A -o yaml /tmp/network_np_backup_$(date %Y%m%d_%H%M%S).yaml ​ # 2. 记录当前网络状态 echo 网络状态记录 $(date) /tmp/network_status_$(date %Y%m%d).txt echo --- 节点状态 --- /tmp/network_status_$(date %Y%m%d).txt kubectl get nodes -o wide /tmp/network_status_$(date %Y%m%d).txt echo --- 网络组件 Pod --- /tmp/network_status_$(date %Y%m%d).txt kubectl get pods -n kube-system -o wide /tmp/network_status_$(date %Y%m%d).txt echo --- Service --- /tmp/network_status_$(date %Y%m%d).txt kubectl get svc -A /tmp/network_status_$(date %Y%m%d).txt echo --- Ingress --- /tmp/network_status_$(date %Y%m%d).txt kubectl get ingress -A /tmp/network_status_$(date %Y%m%d).txt echo --- NetworkPolicy --- /tmp/network_status_$(date %Y%m%d).txt kubectl get networkpolicy -A /tmp/network_status_$(date %Y%m%d).txt cat /tmp/network_status_$(date %Y%m%d).txt ​ # 3. 制定操作方案 cat /tmp/network_operation_plan.md EOF # 网络操作方案 ## 一、操作目标 ## 二、影响范围评估 ## 三、操作步骤与时间窗口 ## 四、回滚方案 ## 五、验证标准 ## 六、风险点与应对措施 EOF echo 操作方案模板已创建 ​ # 4. 确认业务窗口 echo 当前时间: $(date) echo 建议在业务低峰期执行网络操作避免影响业务 ​ # 5. 通知相关业务方 # echo 网络运维操作通知 | mail -s 网络运维通知 adminexample.com ​3. 执行网络组件配置操作# 1. 检查网络组件配置 # Flannel 配置 kubectl get cm kube-flannel-cfg -n kube-system -o yaml 2/dev/null | head -50 # Calico 配置 kubectl get cm calico-config -n kube-system -o yaml 2/dev/null | head -50 # kube-proxy 配置 kubectl get cm kube-proxy -n kube-system -o yaml 2/dev/null | head -50 ​ # 2. 检查网络组件日志 # Flannel 日志 kubectl logs -n kube-system -l appflannel --tail50 2/dev/null # Calico 日志 kubectl logs -n kube-system -l k8s-appcalico-node --tail50 2/dev/null # kube-proxy 日志 kubectl logs -n kube-system -l k8s-appkube-proxy --tail50 2/dev/null ​ # 3. 检查网络接口和路由 # 在节点上执行通过 kubectl debug 或 ssh # ip addr show | grep -E flannel|cali|weave|cni0|docker0 # ip route show # iptables -t nat -L -n | head -50 ​ # 4. 执行具体网络配置操作根据标题调整 echo 执行网络组件具体配置操作... echo 请根据操作方案执行具体步骤 ​ # 5. 应用网络配置变更 # kubectl apply -f /tmp/network_config.yaml # kubectl rollout restart daemonset/flannel -n kube-system # kubectl rollout restart daemonset/calico-node -n kube-system # kubectl rollout restart daemonset/kube-proxy -n kube-system ​ # 6. 等待网络组件重启完成 kubectl rollout status daemonset/flannel -n kube-system --timeout120s 2/dev/null kubectl rollout status daemonset/calico-node -n kube-system --timeout120s 2/dev/null kubectl rollout status daemonset/kube-proxy -n kube-system --timeout120s 2/dev/null echo 网络组件重启完成 ​4. 验证网络连通性与业务无感知# 1. 验证节点网络状态 kubectl get nodes -o wide # 预期所有节点 Ready网络 IP 正确 ​ # 2. 验证网络组件 Pod 状态 kubectl get pods -n kube-system | grep -E flannel|calico|weave|kube-proxy|coredns # 预期所有网络组件 Pod RunningREADY 1/1 ​ # 3. 验证 Pod 网络连通性 # 创建测试 Pod kubectl run net-test-a --imagebusybox --restartNever -- sleep 3600 2/dev/null kubectl run net-test-b --imagebusybox --restartNever -- sleep 3600 2/dev/null sleep 15 ​ # 获取 Pod IP POD_A_IP$(kubectl get pod net-test-a -o jsonpath{.status.podIP} 2/dev/null) POD_B_IP$(kubectl get pod net-test-b -o jsonpath{.status.podIP} 2/dev/null) echo Pod A IP: $POD_A_IP echo Pod B IP: $POD_B_IP ​ # 同节点 Pod 通信 kubectl exec net-test-a -- ping -c 3 $POD_B_IP 2/dev/null # 预期ping 成功无丢包 ​ # 跨节点 Pod 通信确保两个 Pod 在不同节点 # kubectl exec net-test-a -- ping -c 3 其他节点Pod IP ​ # 4. 验证 DNS 解析 kubectl exec net-test-a -- nslookup kubernetes.default.svc.cluster.local 2/dev/null # 预期DNS 解析成功返回 Service IP ​ # 5. 验证 Service 访问 kubectl exec net-test-a -- wget -q -O- http://kubernetes.default.svc.cluster.local 2/dev/null | head -5 # 预期Service 访问正常 ​ # 6. 验证网络策略如果配置了 kubectl get networkpolicy -A # 预期网络策略已应用符合预期 ​ # 7. 清理测试 Pod kubectl delete pod net-test-a net-test-b --force --grace-period0 2/dev/null echo 测试 Pod 已清理 ​5. 网络监控告警与巡检配置# 1. 配置网络监控指标 # 检查 Prometheus 是否采集网络指标 kubectl get servicemonitor -A 2/dev/null | grep -E flannel|calico|kube-proxy|ingress|metallb|traefik kubectl get podmonitor -A 2/dev/null | grep -E flannel|calico|kube-proxy|ingress|metallb|traefik ​ # 2. 配置网络告警规则 cat /tmp/network_alerts.yaml EOF groups: - name: network-alerts rules: - alert: NetworkComponentPodDown expr: kube_pod_status_phase{namespacekube-system,phaseRunning,pod~flannel.*|calico.*|kube-proxy.*|coredns.*} 0 for: 5m labels: severity: critical annotations: summary: 网络组件 Pod 异常 - alert: PodNetworkLatencyHigh expr: histogram_quantile(0.99, sum(rate(coredns_dns_request_duration_seconds_bucket[5m])) by (le)) 1 for: 5m labels: severity: warning annotations: summary: DNS 解析延迟过高 - alert: NetworkPolicyDenyHigh expr: rate(calico_denied_packets_total[5m]) 100 for: 5m labels: severity: warning annotations: summary: 网络策略拒绝包数过高 EOF echo 告警规则模板已创建 ​ # 3. 配置网络日志归集 # 检查日志采集配置 kubectl get configmap -n kube-system | grep -i log # 配置 Fluentd/Filebeat 采集网络组件日志 ​ # 4. 配置网络巡检脚本 cat /tmp/network_audit.sh SCRIPT #!/bin/bash echo 网络巡检 $(date) echo --- 节点状态 --- kubectl get nodes -o wide | grep -v Ready echo --- 网络组件 Pod --- kubectl get pods -n kube-system | grep -v Running | grep -v NAME echo --- DNS 解析测试 --- kubectl run dns-test --imagebusybox --restartNever --rm -it -- nslookup kubernetes.default 2/dev/null | tail -3 echo --- Service 异常 --- kubectl get svc -A | grep -v ClusterIP | grep -v NodePort | grep -v LoadBalancer | grep -v TYPE echo --- Ingress 异常 --- kubectl get ingress -A 2/dev/null | grep -v CLASS | grep -v none echo 巡检完成 SCRIPT chmod x /tmp/network_audit.sh /tmp/network_audit.sh ​ # 5. 设置定时巡检 # crontab -e # 0 2 * * * /tmp/network_audit.sh /var/log/network_audit.log 21 ​6. 验证操作结果与生成报告# 1. 验证网络组件状态 kubectl get pods -n kube-system | grep -E flannel|calico|weave|kube-proxy|coredns|ingress|metallb|traefik # 预期所有网络组件 Pod RunningREADY 正常 ​ # 2. 验证网络连通性 kubectl run net-verify --imagebusybox --restartNever --rm -it -- ping -c 3 kubernetes.default 2/dev/null # 预期网络连通正常 ​ # 3. 验证业务 Pod 状态 kubectl get pods -A | grep -v Running | grep -v NAME | head -20 # 预期无因网络问题导致的异常 Pod ​ # 4. 验证 Service 访问 kubectl get svc -A -o wide | head -20 # 预期Service 正常Endpoints 有后端 IP ​ # 5. 验证 Ingress 访问如果配置了 kubectl get ingress -A 2/dev/null # 预期Ingress 规则正常地址已分配 ​ # 6. 验证网络策略如果配置了 kubectl get networkpolicy -A 2/dev/null # 预期网络策略已应用 ​ # 7. 生成操作报告 echo 网络操作报告 /tmp/network_operation_report.txt echo 操作时间: $(date) /tmp/network_operation_report.txt echo 操作前网络组件 Pod 数: $(cat /tmp/network_pods_backup_*.yaml 2/dev/null | grep -c kind: Pod) /tmp/network_operation_report.txt echo 操作后网络组件 Pod 数: $(kubectl get pods -n kube-system --no-headers | wc -l) /tmp/network_operation_report.txt echo 异常节点: $(kubectl get nodes | grep -v Ready | grep -v NAME | wc -l) /tmp/network_operation_report.txt echo 异常 Pod: $(kubectl get pods -A | grep -v Running | grep -v NAME | wc -l) /tmp/network_operation_report.txt echo Service 数: $(kubectl get svc -A --no-headers | wc -l) /tmp/network_operation_report.txt echo Ingress 数: $(kubectl get ingress -A --no-headers 2/dev/null | wc -l) /tmp/network_operation_report.txt echo NetworkPolicy 数: $(kubectl get networkpolicy -A --no-headers 2/dev/null | wc -l) /tmp/network_operation_report.txt cat /tmp/network_operation_report.txt ​验证流程# 1. 节点状态验证 kubectl get nodes -o wide # 预期所有节点 Ready网络 IP 正确 ​ # 2. 网络组件 Pod 验证 kubectl get pods -n kube-system | grep -E flannel|calico|weave|kube-proxy|coredns|ingress|metallb|traefik # 预期所有网络组件 Pod RunningREADY 正常 ​ # 3. Pod 网络连通性验证 kubectl run net-test --imagebusybox --restartNever --rm -it -- ping -c 3 kubernetes.default 2/dev/null # 预期ping 成功无丢包 ​ # 4. DNS 解析验证 kubectl run dns-test --imagebusybox --restartNever --rm -it -- nslookup kubernetes.default.svc.cluster.local 2/dev/null # 预期DNS 解析成功 ​ # 5. Service 访问验证 kubectl get svc -A -o wide kubectl get endpoints -A # 预期Service 正常Endpoints 有后端 IP ​ # 6. 业务 Pod 状态验证 kubectl get pods -A | grep -v Running | grep -v NAME | head -10 # 预期无因网络问题导致的异常 Pod ​ # 7. 网络策略验证如果配置了 kubectl get networkpolicy -A 2/dev/null # 预期网络策略已应用 ​ # 8. 操作报告验证 cat /tmp/network_operation_report.txt # 预期报告包含操作前后对比无异常状态 ​排错方案Service 访问不通检查 Service selector 与 Pod 标签匹配、Endpoints 是否有后端 IP、端口配置、kube-proxy 状态NodePort 端口冲突检查端口范围30000-32767、已占用端口、Service 端口配置、节点防火墙负载不均衡检查 kube-proxy 模式iptables/ipvs、会话保持配置、后端 Pod 分布、连接数后端 Pod 健康检查失败检查 readinessProbe 配置、Pod 状态、Endpoints 更新延迟、kube-proxy 同步Service 访问延迟高检查 kube-proxy 模式、iptables 规则数量、ipvs 配置、后端 Pod 性能ExternalTrafficPolicy 问题检查 Local/Cluster 模式、源 IP 保留、负载均衡、节点间转发Service 会话保持失效检查 sessionAffinity 配置、ClientIP 超时、Cookie 配置、kube-proxy 模式闲置 Service 资源清理检查无后端 Pod 的 Service、无标签选择器的 Service、外部 Service 残留
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

新大陆物联网云平台实战:从设备接入到告警配置全解析 2026/9/30 3:54:50

新大陆物联网云平台实战:从设备接入到告警配置全解析

直接做物联网项目的朋友应该都有同感:硬件端再复杂,好歹能靠示波器、逻辑分析仪一点点调出来,真正让人头皮发麻的,往往是设备联网之后那一堆“云上的活”。设备接入要选协议,数据上来要存要算,要在页面上看…

阅读更多 →
C语言一维数组从入门到实战:内存布局、越界与排序算法详解 2026/9/30 3:54:50

C语言一维数组从入门到实战:内存布局、越界与排序算法详解

刚学C语言的时候,我最大的困惑之一就是:如果我想存一个班30个人的成绩,难道要定义30个变量?那如果是300个人、3000个人呢?定义变量名都能把人逼疯。直到我搞懂了一维数组,才意识到编程里“数据集合”这个概…

阅读更多 →
百人共学AI问答架构:Ollama+Open WebUI+RAG知识库实战 2026/9/30 3:54:50

百人共学AI问答架构:Ollama+Open WebUI+RAG知识库实战

1. 百人共学场景下,这套架构到底要解决什么问题先把背景说清楚。所谓“百人共学”,不是一百个人同时在线看直播那种单向输出,而是一百来号人各自带着问题进来,在同一套 AI 问答入口里查资料、问概念、做练习、互相看别人的提问记录…

阅读更多 →
Go实现只读GaussDB MCP服务:让Claude Code安全查库 2026/9/30 3:54:50

Go实现只读GaussDB MCP服务:让Claude Code安全查库

1. 为什么我要给 Claude Code 配一个只读的 GaussDB 通道先说结论:我写了一个用 Go 实现的 MCP 服务,把 GaussDB 的查询能力以只读方式暴露给 Claude Code,让 AI 能直接查表结构、看样本数据、跑分析型 SQL,但绝对碰不到任何写操作…

阅读更多 →
AI应用开发全栈攻坚:从RAG检索优化到异步高并发实战 2026/9/30 3:54:50

AI应用开发全栈攻坚:从RAG检索优化到异步高并发实战

1. 从“会调API”到“能扛业务”:AI应用开发全栈攻坚到底在攻什么这两年AI应用开发岗位的需求量肉眼可见地涨,但真正去面试或者带项目的时候你会发现,光会写个openai.chat.completions.create已经远远不够了。招聘方要的是能把一个大模型能力…

阅读更多 →
老旧小区热量表无线抄表改造实战:LoRaWAN方案与部署要点 2026/9/30 3:54:37

老旧小区热量表无线抄表改造实战:LoRaWAN方案与部署要点

老旧小区热量表无线抄表改造,刚听到需求时,我以为无非就是把有线换成无线,难度不大。真进了现场才发现,问题远没有想象中简单:表在管道井里,楼板是现浇混凝土,地下室信号一进去就断半格&#xf…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉