如何在Kubernetes中定义静态ClusterIP?

7

我知道我们可以通过定义负载均衡器来将公共IP设置为静态IP,但是我们能否为服务设置一个静态的集群IP?

例如:

**NAME                           TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE**
service/my-application-service   ClusterIP  10.111.67.245   <none>        80/TCP     11d

做这件事情的用例是什么? - Arghya Sadhu
我正在为一个Pod设置DNS别名,因为使用了Keycloak(SSO)应用程序。如果服务的IP地址在某一天发生更改,则DNS别名将无法按预期工作。这就是为什么我想要为服务定义一个静态IP,并为此IP设置DNS别名的原因。 - Makiki
我已经进行了研究,但在谷歌上没有找到任何相关信息。 - Makiki
你看过 https://kubernetes.io/docs/concepts/services-networking/service/#externalname 吗? - Arghya Sadhu
1
Kubernetes提供了自己的DNS:my-application-service是一个有效的主机名,指向Service的内部IP地址。您不需要在应用程序设置中复制此行为。 - David Maze
1个回答

14

看起来你可以在ClusterIP类型的服务的spec下指定clusterIP字段。

例如:

apiVersion: v1
kind: Service
metadata:
  name: myawesomeservice
  namespace: myawesomenamespace
spec:
  clusterIP: 10.43.11.51
  ...

文档中最相关的片段:

"如果手动指定了地址,并且在范围内(根据系统配置),并且未被使用,则将分配该地址给服务;否则创建服务将失败" - https://kubernetes.io/docs/reference/kubernetes-api/services-resources/service-v1/

以下是完整段落。

规范

clusterIP(字符串)

clusterIP 是服务的 IP 地址,通常是随机分配的。如果手动指定一个地址,并且在系统配置中是有效的且未被使用,则将其分配给服务;否则创建服务将失败。除非同时更改类型字段为 ExternalName(需要此字段为空白),或者从 ExternalName 更改类型字段(在这种情况下可以选择指定此字段),否则不能通过更新更改此字段。有效值为 "None"、空字符串("")或有效的 IP 地址。将其设置为 "None" 将创建“无头服务”(没有虚拟 IP),这在直接端点连接优先且不需要代理时非常有用。仅适用于类型 ClusterIP、NodePort 和 LoadBalancer。如果在创建类型为 ExternalName 的服务时指定此字段,将创建失败。将服务更新为 ExternalName 类型时,此字段将被清除。更多信息: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

源代码:https://kubernetes.io/docs/reference/kubernetes-api/services-resources/service-v1/


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