【问题标题】:Kubernetes ClusterIP service reachable from outside the cluster?Kubernetes ClusterIP 服务是否可以从集群外部访问?
【发布时间】:2021-02-03 15:19:49
【问题描述】:

我有一个服务定义为 ClusterIP 服务类型,但我惊讶地发现它有端点,因此可以从集群外部访问。

根据定义,clusterIP 服务类型应该只能从 Kubernetes 集群内部访问,但是拥有一个端点使得服务可以从任何地方(在某个 VNET 内)pinge,并且可以从集群外部访问。

有人知道为什么会这样吗?

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 地址?
  • IP:10.3.1.20 不是集群内部的,而是一个有效的私有 IP,可在整个 VNet 中访问

标签: kubernetes


【解决方案1】:

您看到的端点是服务背后的 Pod 的 IP 地址和端口。

创建集群时,您定义了一个 Pod IP 地址范围,每个 Pod 在创建时都会从该范围内获取一个 IP 地址(这些是“虚拟”IP 地址,因为没有物理网络设备具有这些 IP地址)。

根据您使用的 CNI 插件,此 CNI 插件会在主机网络上的网关中配置路由条目,以将消息路由到这些 Pod(当您使用 unencapsulated CNI 插件时会发生这种情况,见encapsulated vs unencapsulated CNI plugins)。因此,如果您可以从集群外部访问此网关(例如,如您所说,从同一个 VNET),那么您可以从集群外部访问这些 Pod。

但是,这是一种特殊情况,您通常会限制和缩小您在其中创建 Kubernetes 集群的网络,以免意外来源访问集群内的任何内容。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 嘿 Rafal,谢谢您的回答。但是我不明白的是,如果端点 IP 是 VNet 中的有效私有 IP,那么只要我在 VNet 上,我就可以从任何地方 ping 它们。我的意思是他们甚至可以从我的本地机器上ping。那么,可 pingeable 的事实是否意味着它们在定义上是可访问的?
    • 这实际上取决于您的 Kubernetes 网络配置。如果您将 VNET 作为您在 Kubernetes for Pods 中使用的网络,那么是的,您可以访问它们。但总的来说,Pod 应该有一个单独的内部网络。
    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 2021-05-16
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多