我们的 Openshift 集群在 network/cluster 中使用以下定义创建:
spec:
clusterNetwork:
- cidr: 10.0.0.0/23
hostPrefix: 26
externalIP:
autoAssignCIDRs:
- 10.10.0.0/24
networkType: Calico
serviceNetwork:
- 10.20.0.0/24
我想知道是否可以创建服务类型 ClusterIP(不是 LoadBalancer)并自动为其分配 ExternalIP?
如果服务定义为 LoadBalancer ( oc create svc loadblancer my-service --tcp=80 ) 自动分配工作正常,但它会暴露 NodePort ,这是我们试图避免的。
我可以像 oc expose deploy my-deployment --external-ip="10.10.0.100 --port=80"
一样手动指定 ExternalIP,但我想知道它是否可以自动完成。
答案 0 :(得分:2)
很遗憾,在 ExternalIPs
服务类型下无法自动填充 ClusterIP
字段。 ClusterIP
仅供内部访问。您的情况的解决方法不是预期的行为,因此它无法由服务控制器自动处理。
幸运的是,您想在 LoadBalancer
类型下修复的问题是社区中讨论广泛的问题。一个新补丁已合并到最新的 Kubernetes 代码库中。
在 1.20 CHANGELOG 下,您可以在此处看到更改。
<块引用>现在可以通过设置(新)参数 Service.spec.allocateLoadBalancerNodePorts=false 来禁用为 LoadBalancer 类型的服务自动分配 NodePort。默认是为 LoadBalancer 类型的服务分配 NodePort,这是现有行为。 (#92744, @uablrek) [SIG 应用程序和网络]
因此,当您将集群升级到 Kubernetes v1.20 并应用类似的内容时。
apiVersion: v1
kind: Service
metadata:
name: example-service
spec:
selector:
app: example
ports:
- port: 8765
targetPort: 9376
allocateLoadBalancerNodePorts: false
type: LoadBalancer
节点端口分配将被禁用,您无需任何黑客方法即可解决问题。