【问题标题】:Exposing deployment as ClusterIP and ExternalIP in Kubernetes/Openshift在 Kubernetes/Openshift 中将部署公开为 ClusterIP 和 ExternalIP
【发布时间】:2021-01-09 14:50:30
【问题描述】:

我们在 network/cluster 中使用以下定义创建的 Openshift 集群:

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 loadblaacer my-service --tcp=80 ) 自动分配工作正常,但它会暴露 NodePort ,这是我们试图避免的。

我可以像 oc expose deploy my-deployment --external-ip="10.10.0.100 --port=80" 一样手动指定 ExternalIP,但想弄清楚它是否可以自动完成。

【问题讨论】:

    标签: kubernetes openshift


    【解决方案1】:

    很遗憾,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
    

    节点端口分配将被禁用,您无需任何技巧即可解决问题。

    【讨论】:

      猜你喜欢
      • 2020-07-11
      • 2019-05-06
      • 1970-01-01
      • 2020-01-31
      • 2021-11-04
      • 2018-09-29
      • 2020-04-11
      • 2016-12-22
      • 2021-06-20
      相关资源
      最近更新 更多