kubernetes中的入口是否占用节点';s端口

kubernetes中的入口是否占用节点';s端口,kubernetes,kubernetes-ingress,Kubernetes,Kubernetes Ingress,我正在读《库伯内特斯》。 如果我理解正确,入口将把节点的流量转发给Kubernetes中的服务。例如,当HTTP请求发送到节点的端口80时,入口将把该数据转发到服务。 我的问题是: 这是否意味着入口将占用节点的端口80?那么如果我有另一个应用程序想使用端口80会导致错误吗 如果我的第一个问题的答案是“是”,那么是否可以配置入口以侦听节点上的其他端口 入口是一种配置或路由映射,但您需要一个入口控制器来完成实际的路由部分 在您看到的示例中,它给出了一条规则,将http路径/testpath映射到端口

我正在读《库伯内特斯》。
如果我理解正确,入口将把节点的流量转发给Kubernetes中的服务。例如,当HTTP请求发送到节点的端口80时,入口将把该数据转发到服务。
我的问题是:

  • 这是否意味着入口将占用节点的端口80?那么如果我有另一个应用程序想使用端口80会导致错误吗
  • 如果我的第一个问题的答案是“是”,那么是否可以配置入口以侦听节点上的其他端口

  • 入口是一种配置或路由映射,但您需要一个入口控制器来完成实际的路由部分


    在您看到的示例中,它给出了一条规则,将http路径
    /testpath
    映射到端口
    80
    上名为
    test
    的服务;因此,特定服务可以满足发送到
    /testpath
    url的请求。

    如果您对入口感兴趣,我假设您对将外部流量引入集群感兴趣。因此,有必要提供nodeport类型的服务,以允许入口通过节点上的端口访问pod/容器上的端口。是的,这意味着它会占用节点上的端口。但是,这不是您感兴趣的一部分,因为节点的端口与pod上的端口不同。 这提供了一个很好的示例,说明节点报告通常是如何工作的

    如果您打算在集群中使用不同的应用程序。您最好使用两个单独的nodePort服务定义两个入口,这两个服务自动管理每个k8s节点上的端口管理。 如果您真的对手动设置感兴趣,那么最好使用这样的解决方案:


    在k8s中,没有端口x80xx已经被另一个应用程序使用的情况。

    现在让我解释一下原因: 正如您所知,您必须有一个服务来公开在k8s集群中运行的应用程序/POD。在这里,您创建的每个服务都将有一个唯一的新k8s集群内部ip分配给它。因此,如果您有另一个具有相同端口的服务,您将不会收到该错误(端口x80xx已被另一个应用程序使用)。因为只有当两个应用程序尝试获取相同的ip和端口(套接字)时,才会引发该特定错误

    现在进入入口点: 基本上,ingress是基于k8s集群中运行的ingress控制器吊舱实现的,是的,它有一个服务。因此,您可以将其分配给任何服务端口(有预定义的端口),因为它将获得分配给它的新集群ip

    现在将您的服务公开到集群之外: 要在集群外部公开服务,可以使用serviceType负载平衡器和nodeport

    节点端口:节点端口是集群中每个节点上的开放端口。由于这是节点(主机)的端口,您不能将一个端口分配给多个服务,因为这将不会有不同的ip而不是单个本地主机ip

    回答您的问题:

  • 这是否意味着入口将占用节点的端口80?那么如果我有另一个应用程序想使用端口80会导致错误吗
  • 是的,如果您使用nodePort 80公开入口控制器服务,则其他服务不能使用此端口(端口x80xx已被其他应用程序使用。)。实际上,您不能这样做,因为kubernetes只允许范围超过30000的nodePort

  • 如果我的第一个问题的答案是“是”,那么是否可以配置入口以侦听节点上的其他端口

  • 是的,您可以使用任何其他端口(通常为30000–32767)作为节点端口来公开入口服务,在这种情况下,您必须使用类似
    url的urlhttp://host_machin_IP:NodePort

    那么对节点端口的http请求也是端口80?在文档示例中,传入的请求只是一个普通的http请求:“/far”。这是否意味着,在该特定示例中,入口的节点端口数为80@欧阳维杰 示例ingress文档没有定义,但大多数默认值为80和443。默认服务
    节点端口
    范围可在kubeapi启动时配置。那么为什么使用ingress的示例不需要指定节点端口呢。入口的默认节点端口是否为80?
    apiVersion: v1
    kind: Service
    metadata:  
     name: my-nodeport-service
    spec:
      selector:    
    app: my-app
    type: NodePort
    ports:  
    - name: http
      port: 80
      targetPort: 80
      nodePort: 30036
      protocol: TCP