kubernetes中将外部IP地址与ClusterIP服务类型一起使用的方式是什么

时间:2019-03-18 12:00:55

标签: kubernetes

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

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

将服务与type: ClusterIP一起使用时,它只有群集IP,没有外部IP地址<none>

答案 2 :(得分:0)

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

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

新的外部IP地址仅分配为ClusterIP类型。

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

答案 3 :(得分:0)

ClusterIP是从IP池分配给服务的唯一IP,用于访问该服务集群的Pod IP仅可在集群内部使用.Cluster IP是kubernetes中的默认服务类型。

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

以上示例将创建一个具有外部IP和群集IP的服务。 对于负载均衡器,节点端口服务,可以通过externalIP从其他群集访问该服务

答案 4 :(得分:0)

只需添加到coolinuxoid答案即可。我正在与GKE合作,并且根据他们的documentation,当您添加类型为ClusterIP的服务时,他们提供了通过以下方式进行访问:

访问您的服务 列出您正在运行的Pod:

kubectl获得豆荚

在输出中,复制以以下开头的Pod名称之一 我的部署。

NAME READY STATUS重启年龄 my-deployment-dbd86c8c4-h5wsf 1/1正在运行0 2m51s

将shell放入您正在运行的容器之一:

kubectl exec -it pod-name-sh

其中pod-name是我部署中的其中一个Pod的名称。

在您的外壳中,安装curl:

apk添加--no-cache curl

在容器中,通过使用群集向服务请求 IP地址和端口80。请注意,80是端口字段的值 您的服务。这是您用作客户端的端口 服务。

curl群集IP:80 因此,尽管您可能会找到一种从外部路由到此类服务的方法,但这并不是推荐的/常规的方法。

作为更好的选择,可以使用:

  1. LoadBalancer,如果您正在从事具有大量服务和详细要求的项目。
  2. NodePort,如果您正在从事不需要云原生负载平衡的小型项目,并且您不介意直接使用节点的IP将其映射到服务。顺便提一句,同一文档确实建议这样做(亲自测试;像超级按钮一样工作):

如果群集中的节点具有外部IP地址,请找到 您的节点之一的外部IP地址:

kubectl获取节点-输出宽

输出显示您节点的外部IP地址:

名称状态角色年龄版本外部IP gke-svc -...就绪1h v1.9.7-gke.6 203.0.113.1

并非所有群集都具有节点的外部IP地址。例如, 专用群集中的节点没有外部IP地址。

创建防火墙规则以允许节点端口上的TCP通信:

gcloud计算防火墙规则创建test-node-port --allow tcp:节点端口

其中:node-port是服务的nodePort字段的值。