![](/img/trans.png)
[英]How to get client IP address in Kubernetes with service type ClusterIP
[英]what is the use of external IP address with a ClusterIP service type in kubernetes
当服务类型为ClusterIP
时,kubernetes 服务中外部 IP 地址选项的用途是什么
ExternalIP
只是一个端点,通过它可以从集群ExternalIP
访问服务,因此具有ExternalIP
的ClusterIP
类型服务仍然可以使用其 service.namespace DNS 名称在集群内部访问,但现在它也可以从其外部访问端点也是。 例如,您可以将ExternalIP
设置为您的 k8s 节点之一的 IP,或者在该 IP 上创建到您的集群的入口。
ClusterIP是 Kubernetes 中的默认服务类型,它允许您仅在集群内访问您的服务。
如果您的服务类型设置为LoadBalancer或NodePort ,则会自动创建ClusterIP
并且LoadBalancer
或NodePort
服务将路由到此ClusterIP
IP 地址。
新的外部 IP 地址仅分配给LoadBalancer
类型。
当您将服务设置为NodePort
时,您还可以使用节点的外部 IP 地址。 但在这种情况下,您的节点需要额外的防火墙规则,以允许暴露的节点端口的入口流量。
当您使用type: ClusterIP
服务时,它只有集群 IP,没有外部 IP 地址<none>
。
ClusterIP 是从 IP 池提供给服务的唯一 Ip,并且访问该服务的 pod 的集群 IP 只能在集群内部使用。集群 IP 是 kubernetes 中的默认服务类型。
kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer
上面的例子将创建一个具有外部 IP 和集群 IP 的服务。 对于负载均衡器、节点端口服务,可以通过外部IP从其他集群访问该服务
只是为了添加到 coolinuxoid 答案。 我正在使用 GKE 并根据他们的文档,当您添加他们提供的 ClusterIP 类型的服务以通过以下方式访问它时:
访问您的服务列表您正在运行的 Pod:
kubectl 获取豆荚
在输出中,复制以 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 添加 --no-cache curl
在容器中,使用您的集群 IP 地址和端口 80 向您的 Service 发出请求。请注意,80 是您的 Service 的端口字段的值。 这是您用作服务客户端的端口。
curl cluster-ip:80 因此,虽然您可能会找到一种从外部路由到此类服务的方法,但这不是推荐的/通常的方法。
作为更好的选择,请使用:
LoadBalancer
如果您正在处理具有大量服务和详细要求的项目。NodePort
如果您正在处理不需要云原生负载平衡的较小的东西,并且您不介意直接使用节点的 IP 将其映射到服务。 顺便说一句,同一个文档确实建议了一个选项(亲自测试过;效果很好):如果集群中的节点具有外部 IP 地址,请查找其中一个节点的外部 IP 地址:
kubectl 获取节点 --output 宽
输出显示节点的外部 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 计算防火墙规则创建测试节点端口 --allow tcp:node-port
其中: node-port 是您的服务的 nodePort 字段的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.