Kubernetes中使用ClusterIP服务类型时,外部IP地址有什么用途?

7
当kubernetes服务为类型ClusterIP时,外部IP地址选项的用途是什么?

1
你能展示一個外部的 ClusterIP 的例子嗎? - suren
5个回答

2

ClusterIP 是 Kubernetes 中的默认服务类型,它只允许您在集群内部访问您的服务。

如果您的服务类型设置为 LoadBalancerNodePort,则会自动创建 ClusterIP 并将 LoadBalancerNodePort 服务路由到此 ClusterIP IP 地址。

新的外部 IP 地址仅分配给 LoadBalancer 类型。

当您将服务设置为 NodePort 时,也可以使用节点的外部 IP 地址。但在这种情况下,您需要为节点添加额外的防火墙规则,以允许入口流量进入您的暴露的节点端口。


1
一个 ExternalIP 就是一个通过它可以从集群外部访问服务的终端点,因此带有 ExternalIPClusterIP 类型的服务仍然可以使用其 service.namespace DNS 名称在集群内部访问,但现在也可以从其外部终端点访问。例如,您可以将 ExternalIP 设置为 k8s 节点之一的 IP,或者在该 IP 上为您的集群创建入口。

2
你好,将nodeIP作为pod的externalIP是个好主意吗? - Suresh Vishnoi
1
这是一个很好的问题@SureshVishnoi。在我看来,如果是多节点集群,这是不好的做法。 - Hrishikesh
@Hrishikesh 是的,节点可能会出现停机的情况。我认为 ExternalIP 应该来自另一个子网,并路由到 k8s 集群的多个节点。 - Suresh Vishnoi

0

ClusterIP是从IP池中分配给服务的唯一IP,只有在集群内部才能使用Cluster IP访问该服务的Pod。ClusterIP是Kubernetes中默认的服务类型。

kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer

上述示例将创建具有外部IP和集群IP的服务。在负载均衡器、节点端口服务的情况下,可以通过外部IP从其他集群访问该服务。


0
当您使用具有 type: ClusterIP 的服务时,它只有集群 IP ,没有外部 IP 地址 <none>

0

仅补充coolinuxoid的答案。我正在使用GKE,并基于他们的文档,当您添加类型为ClusterIP的服务时,他们提供通过以下方式访问它:

访问您的服务 列出正在运行的Pod:
kubectl get pods
在输出中,复制以my-deployment开头的一个Pod名称。
NAME READY STATUS RESTARTS AGE my-deployment-dbd86c8c4-h5wsf 1/1 Running 0 2m51s
进入其中一个正在运行的容器的shell:
kubectl exec -it pod-name -- sh
其中pod-name是my-deployment中一个Pod的名称。
在shell中安装curl:
apk add --no-cache curl
在容器中,通过使用集群IP地址和端口80向您的服务发出请求。请注意,80是您的服务端口字段的值。这是您作为服务客户端使用的端口。
curl cluster-ip:80 因此,虽然您可能会找到一种从外部路由到此类服务的方法,但这不是推荐/普通的方法。
作为更好的选择,请使用:
  1. 如果你正在处理一个有很多服务和详细要求的项目,可以使用 LoadBalancer
  2. 如果你正在处理一个较小的项目,不需要云原生负载均衡,并且不介意直接使用节点 IP 将其映射到服务,则可以使用 NodePort。顺便提一下,同一份文档确实建议了这样一种选项(我个人测试过,效果非常好):
如果您的集群节点具有外部 IP 地址,请找到其中一个节点的外部 IP 地址:
kubectl get nodes --output wide 输出将显示您的节点的外部 IP 地址:
NAME STATUS ROLES AGE VERSION EXTERNAL-IP gke-svc-... Ready none 1h v1.9.7-gke.6 203.0.113.1
并非所有集群的节点都具有外部 IP 地址。例如,私有集群中的节点没有外部 IP 地址。
创建防火墙规则以允许节点端口上的 TCP 流量:
gcloud compute firewall-rules create test-node-port --allow tcp:node-port
其中 node-port 是您的服务的 nodePort 字段的值。

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