解决k8s中节点之间Pod无法ping通以及Pod正常运行但k8sdashboard无法访问

我的k8s使用的是calico网络插件

我发现我的k8s dashboard网站无法访问

1.使用命令查看Pod的ip以及其部署的节点

kubectl get pods -A -o wide

  发现dashboard的节点 以及calico网络插件都在正常运行

2.查看service

kubectl get svc -A

Pod都显示在正常运行,尝试访问192.168.142:32393 发现无法打开dashboard的ui网站

3.尝试在master 主机上ping各个节点上的pod 发现均无法ping通

4.使用ifconfig命令查看网卡配置情况

发现没有tunl0网卡,因为默认calico的模式是IPIP,使用tunl0网卡在各个节点通信

ifconfig

5.在maser节点上重启网络配置

systemctl stop NetworkManager
systemctl disable NetworkManager
service network restart 

使用ifcong命令 发现tunI0网卡成功启动

6.继续尝试ping node1和node2上的pod  发现node1上的可以ping 通了 node2上的仍然没有反应

7.在node1 和node2上分别进行以上操作重启网络配置​

systemctl stop NetworkManager
systemctl disable NetworkManager
service network restart 

8.继续尝试ping 发现各个节点的pod均能ping通

9.之后尝试访问dashboard网站 成功访问

至此成功解决了pod正常运行但无法在各个节点上互相ping通 以及k8s dashboard 无法访问的问题

<think>我们之前讨论了过Multus配置Kube-OVN的VPC以实现Pod访问外部网络。现在用户的问题是:虚拟机部署的Kube-OVN的VPC下的Pod如何访问K8s节点。 分析需求: 用户想要在Kube-OVN的VPC环境中,让Pod能够访问Kubernetes节点(Node)。这里的节点可能是物理机或者虚拟机,且部署了Kube-OVN。 背景知识: 在Kube-OVN中,默认情况下,Pod过Overlay网络(例如Geneve隧道)与其他Pod节点信。但是,当Pod位于一个自定义VPC中,并且这个VPC配置了外部访问(即underlay网络)时,Pod可能过underlay网络直接与外部信,但访问K8s节点(特别是节点的IP)可能会遇到问题,因为节点的IP常位于物理网络(underlay)中。 问题分析: 1. Pod在自定义VPC中,该VPC启用了外部访问(enableExternal: true),并连接到了underlay网络。 2. Pod拥有两个网络接口:eth0(默认的Overlay网络)和net1(underlay网络)。 3. 用户希望Pod能够过underlay网络访问Kubernetes节点(即节点的物理IP)。 解决方案: 我们需要确保Pod的underlay网络接口(net1)与Kubernetes节点在同一个物理网络段,并且路由可达。 具体步骤: 步骤1:确保Kubernetes节点的IP在underlay子网的同一网段 - 在创建underlay子网时,需要确保子网的CIDR与节点所在物理网络的CIDR一致,或者至少是可达的(过路由)。 步骤2:配置underlay子网 - 在Subnet中,设置`underlayGateway: true`,并且网关设置为物理网络的网关。 - 注意:节点的IP地址应该被排除在子网的分配范围之外,避免IP冲突。 示例子网配置: ```yaml apiVersion: kubeovn.io/v1 kind: Subnet metadata: name: underlay-net spec: vpc: custom-vpc protocol: IPv4 cidrBlock: 192.168.200.0/24 # 与节点物理网络同一网段 gateway: 192.168.200.1 # 物理网关 underlayGateway: true # 使用物理网关 excludeIps: - 192.168.200.1..192.168.200.50 # 排除网关和节点IP # 注意:这里需要排除所有节点的IP,避免分配给Pod ``` 步骤3:配置Multus NetworkAttachmentDefinition - 如上所述,创建NetworkAttachmentDefinition指向该子网。 步骤4:部署Pod时附加该网络 - 过Multus注解将underlay网络附加到Pod。 步骤5:配置节点路由(如果需要) - 如果节点不在同一个二层网络,需要在物理网络设备上配置路由,使得发往Pod underlay网段(192.168.200.0/24)的流量能够被转发到Kubernetes节点。 步骤6:节点防火墙配置 - 确保节点的防火墙允许来自Pod underlay网段的流量访问节点。 步骤7:测试访问 - 在Pod中,使用underlay接口(net1)去ping节点的物理IP。 注意事项: - 如果Pod需要同时访问集群内部服务(ClusterIP)和节点,那么Pod应该使用默认的Overlay网络(eth0)访问集群内部服务,而使用underlay网络(net1)访问节点和外部网络。 - 避免IP冲突:确保underlay子网中排除的IP范围包含了所有节点的物理IP。 示例配置: 1. 创建VPC(如果尚未创建): ```yaml apiVersion: kubeovn.io/v1 kind: Vpc metadata: name: custom-vpc spec: enableExternal: true ``` 2. 创建underlay子网(注意排除节点IP): ```yaml apiVersion: kubeovn.io/v1 kind: Subnet metadata: name: underlay-net spec: vpc: custom-vpc protocol: IPv4 cidrBlock: 192.168.200.0/24 gateway: 192.168.200.1 underlayGateway: true excludeIps: - 192.168.200.1..192.168.200.50 # 排除网关和节点IP # 如果节点IP不在连续范围内,可以单独列出,例如: # - 192.168.200.10 # - 192.168.200.11 ``` 3. 创建NetworkAttachmentDefinition: ```yaml apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: underlay-net namespace: kube-system spec: config: |- { "cniVersion": "0.3.1", "type": "kube-ovn", "server_socket": "/run/openvswitch/kube-ovn-daemon.sock", "provider": "underlay-net" # 与子网名称一致 } ``` 4. 部署Pod: ```yaml apiVersion: v1 kind: Pod metadata: name: multus-pod namespace: default annotations: k8s.v1.cni.cncf.io/networks: kube-system/underlay-net spec: containers: - name: app image: nginx:alpine ``` 5. 在Pod中测试访问节点: ```bash kubectl exec -it multus-pod -- ping -I net1 <节点的物理IP> ``` 问题排查: - 如果无法访问,检查节点上的路由和防火墙设置。 - 在节点上抓包:`tcpdump -i <网卡> host <Pod的underlay IP>` 查看是否有请求到达。 - 检查节点上的防火墙规则(如iptables)是否阻止了来自Pod网段的流量。 引用说明: - 在配置过程中,我们参考了Kube-OVN的官方文档和最佳实践[^1]。 - 关于Kubernetes网络配置,特别是多网络接口的管理,Multus CNI是常用的方案[^1]。 相关问题: 1. 如何让Kube-OVN的Pod同时访问集群内部服务和外部网络? 2. Kube-OVN中如何配置多个underlay子网? 3. 在Kube-OVN中,如何实现Pod过underlay网络访问集群外的服务?</think>### Kube-OVN VPC Pod 访问 K8s 节点的配置方法 在虚拟机部署的 Kube-OVN 环境中,配置 VPC 下的 Pod 访问 Kubernetes 节点需要解决跨网络平面信问题。以下是具体配置步骤: #### 1. **配置 VPC 启用外部访问** ```yaml # vpc-external.yaml apiVersion: kubeovn.io/v1 kind: Vpc metadata: name: custom-vpc spec: enableExternal: true # 关键:允许访问外部网络[^1] namespaces: - default # 应用命名空间 ``` 应用配置: ```bash kubectl apply -f vpc-external.yaml ``` #### 2. **创建 Underlay 子网(与节点同网段)** ```yaml # node-access-subnet.yaml apiVersion: kubeovn.io/v1 kind: Subnet metadata: name: node-access spec: vpc: custom-vpc protocol: IPv4 cidrBlock: 192.168.100.0/24 # 必须与节点物理网络同网段 gateway: 192.168.100.1 # 物理网关地址 underlayGateway: true # 使用物理网络[^1] excludeIps: - 192.168.100.1..192.168.100.50 # 排除节点使用的IP natOutgoing: false # 禁用NAT ``` #### 3. **配置 Multus 网络附加定义** ```yaml # multus-node-access.yaml apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: node-access-net namespace: kube-system spec: config: |- { "cniVersion": "0.3.1", "type": "kube-ovn", "server_socket": "/run/openvswitch/kube-ovn-daemon.sock", "provider": "node-access" # 匹配子网名称 } ``` #### 4. **部署带 Multus 注解的 Pod** ```yaml # access-node-pod.yaml apiVersion: v1 kind: Pod metadata: name: node-access-pod annotations: k8s.v1.cni.cncf.io/networks: kube-system/node-access-net spec: containers: - name: app image: busybox command: ["sleep", "3600"] ``` #### 5. **节点网络配置验证** 1. 确认节点网络接口: ```bash ip addr show eth0 # 应显示在192.168.100.0/24网段 ``` 2. 检查节点路由表: ```bash ip route show | grep 192.168.100.0 # 应有类似:192.168.100.0/24 dev eth0 proto kernel scope link ``` #### 6. **测试节点访问** ```bash # 获取Pod的underlay IP kubectl exec node-access-pod -- ip addr show net1 # 测试访问节点 kubectl exec node-access-pod -- ping -c 4 192.168.100.10 # 节点IP ``` #### 关键配置说明: 1. **同网段要求** Pod 的 underlay 网络必须与节点物理网络在同一 CIDR 内,否则需配置路由[^1] 2. **安全组配置** 在虚拟机环境中,确保安全组允许 Pod 网段访问节点: ```bash # 示例:开放节点防火墙 sudo iptables -A INPUT -s 192.168.100.0/24 -j ACCEPT ``` 3. **路由告** 若节点跨网段,需在物理网络设备添加路由: ```bash # 物理交换机配置 ip route add 192.168.100.0/24 via <K8s节点IP> ``` #### 故障排查: **现象:** Ping 节点超时 **解决步骤:** 1. 检查 ARP 解析: ```bash kubectl exec node-access-pod -- arp -n ``` 2. 验证节点防火墙: ```bash sudo iptables -L -n -v | grep 192.168.100 ``` 3. 查看 OVS 流表: ```bash kubectl ko ovs-trace <节点名> 'in_port="node-access-net", ip, ip.dst==192.168.100.10' ``` **现象:** 间歇性连接失败 **解决方案:** 检查 MTU 匹配性,在 Subnet 中添加: ```yaml spec: mtu: 1500 # 需与物理网络一致 ``` ### 相关问题 1. 如何实现 Kube-OVN VPC Pod 访问 Kubernetes Service IP?[^1] 2. 在混合云环境中如何配置跨 VPC 的节点访问? 3. Kube-OVN 中如何为 underlay 网络配置 BGP 路由告? 4. 如何监控 VPC Pod节点的网络流量?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值