Kubernetes ClusterIP服务可以从集群外访问吗?

3
我有一个定义为ClusterIP服务类型的服务,但是我惊讶地发现它有端点,因此可以从集群外部访问。
根据定义,clusterIP服务类型应仅从Kubernetes集群内部可访问,但具有端点使得该服务可以从任何地方(在某个VNET内)ping通,并且可以从集群外部访问。
有人知道为什么会发生这种情况吗?
Name:              active-mq-service
Namespace:         qa-env
Labels:            name=active-mq-service
Annotations:       Selector:  app=active-mq
Type:              ClusterIP
IP:                10.0.140.160
Port:              dashboard  8161/TCP
TargetPort:        8161/TCP
Endpoints:         10.3.1.20:8161
Port:              openwire  61616/TCP
TargetPort:        61616/TCP
Endpoints:         10.3.1.20:61616
Port:              amqp  5672/TCP
TargetPort:        5672/TCP
Endpoints:         10.3.1.20:5672
Port:              stomp  61613/TCP
TargetPort:        61613/TCP
Endpoints:         10.3.1.20:61613
Port:              mqtt  1883/TCP
TargetPort:        1883/TCP
Endpoints:         10.3.1.20:1883
Session Affinity:  None
Events:            <none>

谢谢


它是否真的可达?如果你使用 kubectl get pods -l app=active-mq -o wide 命令来查找与选择器匹配的 pod,那么是否确实有一个 pod 具有该集群内部 IP 地址? - undefined
IP地址:10.3.1.20不是集群内部的,而是一个有效的私有IP地址,在整个虚拟网络中都可以访问到。 - undefined
2个回答

4
您看到的终端点是服务后面 Pod 的 IP 地址和端口号。
创建集群时,您需要定义一个 Pod IP 地址范围,每个 Pod 在创建时都会从这个范围中获得一个 IP 地址(这些 IP 地址在实际意义上是“虚拟”的,因为没有使用这些 IP 地址的物理网络设备)。
根据您使用的 CNI 插件不同,此 CNI 插件会在主机网络的网关中配置路由条目,以将消息路由到这些 Pods(当您使用一个未封装的 CNI 插件时会发生这种情况,请参见 封装与未封装的 CNI 插件)。因此,如果您可以从集群外部访问此网关(例如来自相同的 VNET),则可以从集群外部访问这些 Pods。
但是,这是一种特殊情况,通常您会限制并缩小创建 Kubernetes 集群的网络范围,以便没有意外来源可以访问集群内部的任何内容。

0

端点地址是 Pod 的(内部 IP),因此无法从外部访问。

在 Kubernetes 中,在 Service 的上下文中,您有以下地址:

  • IP:内部服务网络中的服务地址
  • 端点 IP:Pod 的地址(服务将请求转发到这些地址)在内部 Pod 网络中
  • 外部 IP:仅适用于 LoadBalancer(在 ClusterIP 服务中没有该选项)

嘿Rafal,谢谢你的回答。然而我不明白的是,如果终端点IP是VNet内有效的私有IP地址,那么只要我在VNet上,我就可以从任何地方ping到它们。我的意思是,甚至可以从我的本地机器上ping得通。所以,能够ping通难道不意味着它们在定义上是可达的吗? - undefined
这实际上取决于您的Kubernetes网络配置。如果您将VNET作为Kubernetes内部Pod使用的网络,那么是的,您可以访问它们。但一般来说,Pods应该有一个单独的内部网络。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接