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

时间:2020-10-20 18:23:07

标签: kubernetes

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

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

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

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>

谢谢

2 个答案:

答案 0 :(得分:2)

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

创建集群时,定义一个Pod IP地址范围,并且每个Pod在创建时都从该范围获得一个IP地址(这些是“虚拟” IP地址,这意味着没有使用这些IP的物理网络设备地址)。

根据您使用的CNI插件,此CNI插件会配置主机网络中网关中的路由条目,以将消息路由到这些Pod(在您使用未封装 CNI插件时,参见encapsulated vs unencapsulated CNI plugins)。因此,如果您可以从群集外部访问此网关(例如,从同一个VNET访问),则可以从群集外部访问这些Pod。

但是,这是一种特殊情况,通常会限制并缩小在其中创建Kubernetes集群的网络的范围,以便没有意外的源可以访问集群中的任何内容。

答案 1 :(得分:0)

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

在Kubernetes中,在服务的上下文中,您具有以下地址:

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