当前位置: 首页 > 知识库问答 >
问题:

为什么在群集中使用KuetePing无法在Bernetes服务中使用

潘宪
2023-03-14

我使用印花布作为我的kubernetes CNI插件,但当我从kubernetes pod ping服务时,它失败了。首先,我找到了服务ip:

    [root@localhost ~]# kubectl get svc -o wide
    NAME                                       TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                 AGE     SELECTOR
prometheus-1594471894-kube-state-metrics   ClusterIP      10.20.39.193    <none>        8080/TCP                                3h16m   app.kubernetes.io/instance=prometheus-1594471894,app.kubernetes.io/name=kube-state-metrics

然后从任何播客(已登录到播客)ping此ip:

root@k8sslave1:/# ping 10.20.39.193
PING 10.20.39.193 (10.20.39.193) 56(84) bytes of data.

没有回应。然后使用traceroute检查路径:

root@k8sslave1:/# traceroute 10.20.39.193
traceroute to 10.20.39.193 (10.20.39.193), 64 hops max
  1   192.168.31.1  0.522ms  0.539ms  0.570ms 
  2   192.168.1.1  1.171ms  0.877ms  0.920ms 
  3   100.81.0.1  3.918ms  3.917ms  3.602ms 
  4   117.135.40.145  4.768ms  4.337ms  4.232ms 
  5   *  *  * 
  6   *  *  * 

包裹是通过互联网发送的,而不是转发给kubernetes服务。为什么会这样?我该怎么做才能修好它?该吊舱可以访问互联网,并可以成功ping其他吊舱的ip。

root@k8sslave1:/# ping 10.11.157.67
PING 10.11.157.67 (10.11.157.67) 56(84) bytes of data.
64 bytes from 10.11.157.67: icmp_seq=1 ttl=64 time=0.163 ms
64 bytes from 10.11.157.67: icmp_seq=2 ttl=64 time=0.048 ms
64 bytes from 10.11.157.67: icmp_seq=3 ttl=64 time=0.036 ms
64 bytes from 10.11.157.67: icmp_seq=4 ttl=64 time=0.102 ms

这是我安装kubernetes集群时的ip配置:

kubeadm init \
--apiserver-advertise-address 0.0.0.0 \
--apiserver-bind-port 6443 \
--cert-dir /etc/kubernetes/pki \
--control-plane-endpoint 192.168.31.29 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version 1.18.2 \
--pod-network-cidr 10.11.0.0/16 \
--service-cidr 10.20.0.0/16 \
--service-dns-domain cluster.local \
--upload-certs \
--v=6

这是dns解析。形态:

cat /etc/resolv.conf 
nameserver 10.20.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

这是pod的内核路由表:

[root@localhost ~]# kubectl exec -it shell-demo /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
root@k8sslave1:/# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.31.1    0.0.0.0         UG    100    0        0 enp1s0
10.11.102.128   192.168.31.29   255.255.255.192 UG    0      0        0 tunl0
10.11.125.128   192.168.31.31   255.255.255.192 UG    0      0        0 tunl0
10.11.157.64    0.0.0.0         255.255.255.192 U     0      0        0 *
10.11.157.66    0.0.0.0         255.255.255.255 UH    0      0        0 cali4ac004513e1
10.11.157.67    0.0.0.0         255.255.255.255 UH    0      0        0 cali801b80f5d85
10.11.157.68    0.0.0.0         255.255.255.255 UH    0      0        0 caliaa7c2766183
10.11.157.69    0.0.0.0         255.255.255.255 UH    0      0        0 cali83957ce33d2
10.11.157.71    0.0.0.0         255.255.255.255 UH    0      0        0 calia012ca8e3b0
10.11.157.72    0.0.0.0         255.255.255.255 UH    0      0        0 cali3e6b175ded9
10.11.157.73    0.0.0.0         255.255.255.255 UH    0      0        0 calif042b3edac7
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.31.0    0.0.0.0         255.255.255.0   U     100    0        0 enp1s0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

共有1个答案

邹学民
2023-03-14

这是一个非常常见的问题,它需要我完全迁移CIDR IP。

最有可能的是,这个问题是关于Pod CIDR(用于为服务和Pod分配IP的IP池)和网络的CIDR之间的CIDR重叠。

在这种情况下,每个节点(VM)的路由表将确保:

sudo route -n

因为你没有提供足够的日志,我将在这里帮助你如何解决这个问题。如果你遇到了我猜测的同样的问题,你将需要从步骤3开始更改Pod的CIDR范围。

步骤1:将calicoctl安装为Kubernetes吊舱

 kubectl apply -f https://docs.projectcalico.org/manifests/calicoctl.yaml

 alias calicoctl="kubectl exec -i -n kube-system calicoctl -- /calicoctl"

步骤2:检查Calico实例的状态。

calicoctl node status


# Sample of output ###################
Calico process is running.

IPv4 BGP status
+--------------+-------------------+-------+----------+-------------+
| PEER ADDRESS |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+--------------+-------------------+-------+----------+-------------+
| 172.17.8.102 | node-to-node mesh | up    | 23:30:04 | Established |
+--------------+-------------------+-------+----------+-------------+

如果你在这一步有问题,停在这里并解决它。

否则,你可以继续。

第3步:列出现有池

calicoctl get ippool -o wide

第4步:创建新池

确保它不会与网络CIDR重叠。

calicoctl create -f -<<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: pool-c
spec:
  cidr: 10.244.0.0/16
  ipipMode: Always
  natOutgoing: true
EOF

新的池被命名为pok-c。

步骤5:删除当前池:

# get all pools
calicoctl get ippool -o yaml > pools.yaml

# edit the file pools.yaml and remove the current pool.
# file editing ... save & quit
# then apply  changes
calicoctl apply -f -<<EOF
 # Here, Must be the new content of the file pools.yaml 

EOF

步骤6:检查分配给每个工作负载(pod)的SDN IP:

calicoctl get wep --all-namespaces

继续重新启动旧的pod,重新创建旧的服务,直到确保所有资源都从新池中分配了IP。

 类似资料:
  • 问题内容: 我只是从Angular开始。阅读Google文档中的服务示例,我只是想知道为什么您会选择使用服务而不是将变量和函数正确地保留在控制器中? 在这种情况下,您何时选择使用服务? 问题答案: 我认为主要原因是: 在控制器之间持久并共享数据。 IE:您创建了一个从数据库中获取数据的服务,如果将其存储在控制器中,一旦更改为另一个控制器,数据将被丢弃(除非您将其存储在$ rootScope中,但这

  • 什么是port和targetport? 是否为每个代理设置LoadBalancer服务? 这些多个代理是否映射到cloud LB的单个公共IP地址? K8S/Cloud之外的服务如何访问单个代理?通过使用?或者使用?。还有,这里用的是哪个端口?还是? 如何在Kafka Broker的属性中指定此配置?对于k8s集群内部和外部的服务,As端口可能不同。 请帮忙。

  • 我正在尝试访问库伯内特斯集群部署的Spring Boot微服务并尝试测试REST API。我在部署脚本中配置了节点端口方法。但是当我尝试使用Postman工具访问时,我只得到“无法获得任何响应”的响应。 我配置了服务。yaml脚本类似于以下结构, 我的部署。yaml如下所示:, 当我使用时,输出如下所示, 我正在尝试通过以下方式访问我部署的API, 更新 当我为我的部署运行命令时,我得到如下响应:

  • 我们使用Spring来运行调度任务,这在单节点上运行良好。我们希望在由N个节点组成的集群中运行这些计划任务,以便任务在一个时间点由一个节点执行。这是针对企业用例的,我们预计最多会有10到20个节点。 我研究了各种选择: 使用Quartz,这似乎是在集群中运行计划任务的流行选择。缺点:我想避免数据库依赖。 使用zoowatch,并且总是只在领导/主节点上运行计划的任务。缺点:任务执行负载没有分布 在

  • 问题内容: 我认为很清楚我要做什么。我希望@ManyToOne人被UglyProblem类继承。但是会有一个例外,例如:“在UglyProblem类中找不到这样的属性(mappedBy =“ person”)”。 我发现的就是这个。我找不到Emmanuel Bernard的帖子来解释其背后的原因。 不幸的是,根据Hibernate文档,“未映射为@MappedSuperclass的超类的属性将被忽

  • 本文向大家介绍为什么要使用Apache Kafka集群?相关面试题,主要包含被问及为什么要使用Apache Kafka集群?时的应答技巧和注意事项,需要的朋友参考一下 答:为了克服收集大量数据和分析收集数据的挑战,我们需要一个消息队列系统。因此Apache Kafka应运而生。其好处是: 只需存储/发送事件以进行实时处理,就可以跟踪Web活动。 通过这一点,我们可以发出警报并报告操作指标。 此外,