【问题标题】:Can same service be launched in 2 different namespaces with type nodeport on the same port?是否可以在 2 个不同的命名空间中启动相同的服务,其类型为 nodeport 在同一端口上?
【发布时间】:2018-03-09 23:33:30
【问题描述】:

我在私有云中设置了一个 Kubernetes 集群。想法是所有开发人员都将使用这个集群来启动应用程序所需的所有微服务。每个开发人员都会在其命名空间中启动所有部署/服务以避免冲突。由于这个云不支持 LoadBalancer ,我使用了 nodePort 并定义了一个端口来为前端公开外部 IP。我使用

访问前端

http://node-ip:port

但是,由于 K8s 可以在同一个节点上启动任意数量的不同命名空间的前端 pod -我会发生冲突,因为该 nodePort 已经分配给首先启动的服务。我现在无法理解如何允许使用相同服务的多人在同一个集群中启动。

示例服务配置如下

apiVersion: v1
kind: Service
metadata:
  name: frontend
  labels:
    name: frontend
spec:
  ports:
  - port: 8884
    targetPort: 8081
    nodePort: 30080
    name: ui
  selector:
    app: test
  type: NodePort

如果第一次运行,http://node-ip:30080 可以访问此前端服务。如果我们在同一个节点的不同命名空间中运行相同的 yaml 会发生什么?我们如何解决这个问题?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您根本不需要定义 nodePort,然后它会被 kubernetes 自动分配给服务,从而避免任何冲突。

    【讨论】:

    • 我知道如果我们不给节点端口,它会选择一个可用的端口。但目前的要求是,一些微服务期望一些服务始终只能在某个端口上对外可用。因此是硬编码的 NodePort 值。
    • 那么 NodePort 对你来说是不够的。您需要的是对 LoadBalancer 服务类型的支持。它建立在 NodePort 之上,因此您将获得随机节点端口,但它还设置了基础设施中提供的 LoadBalancer,以从您选择的端口转发到该 NodePort。这意味着您最终会获得多个 IP 和相同的端口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 2012-01-25
    • 2014-09-04
    • 1970-01-01
    相关资源
    最近更新 更多