kubernetes中的ingress是否占用节点的端口
Does a ingress in kubernetes occupy the node's port
我正在阅读 Kubernetes document about ingress。
如果我没理解错的话,Ingress会将节点的流量转发给Kubernetes中的服务。例如,当向节点的端口 80 发送 HTTP 请求时,入口会将数据转发给服务。
我的问题是:
- 这是否意味着入口将占用节点的80端口?那如果我有别的应用想使用80端口会报错吗?
- 如果我的第一个问题的答案是“是”,那么是否可以配置 Ingress 以侦听节点上的其他端口。
Ingress 是一种配置或路由映射,但您需要一个 IngressController 来完成实际的路由部分。
在您查看的示例中,它给出了将 http 路径 /testpath
映射到端口 80
上名为 test
的服务的规则;以便特定服务可以满足发送到 /testpath
url.
的请求
如果您对入口感兴趣,我假设您有兴趣将外部流量引入您的集群。因此,有必要提供 nodeport 类型的服务,以允许您的入口通过节点上的端口访问您的 pod/容器上的端口。是的,这确实意味着它占用了节点上的端口。然而,这不是您感兴趣的部分,因为节点的端口与您的 pod 上的端口不同。
page 提供了一个很好的示例,说明了节点端口的一般工作方式。
如果您打算在集群中使用不同的应用程序。您可能会使用两个单独的 nodePort 服务定义两个入口,这些服务会自动管理每个 k8s 节点上的端口管理。
如果您真的对手动设置感兴趣,那么您可以采用这样的解决方案1:
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
在k8s中,没有端口x80xx已经被另一个应用程序使用。
现在让我解释一下原因:
如你所知,你必须有一个服务来暴露你的 application/pods 运行 在 k8s cluster.Here,你创建的每个服务都会有一个唯一的新 k8s 集群内部 ip 分配给 it.So 如果您有另一个具有相同端口的服务,您将不会收到该错误(端口 x80xx 已被另一个应用程序使用)。因为仅当两个应用程序尝试获取相同的 ip 和端口(套接字)时才会引发该特定错误。
现在进入入口点:
基本上入口是基于 k8s 集群中的入口控制器 pods 运行 实现的,是的它有一个 service.So 你可以将它分配给任何服务端口(有 pre-defined 端口)因为它将为其分配新的集群 ip。
现在将您的服务暴露在集群之外:
要在集群外公开您的服务,您可以使用 serviceType 负载均衡器和节点端口。
NodePort: NodePort 是你的每个节点上的一个开放端口 cluster.As 这是你的节点(主机)的一个端口,你不能分配一个端口到多个服务,因为这不会有不同的 ip 而不是单个本地主机 ip。
问题的回答:
- 这是否意味着入口将占用节点的80端口?那如果我有别的应用要使用80端口会报错吗?
是的,如果您使用 nodePort 80 公开您的入口控制器服务,则没有其他服务可以使用此端口(Port x80xx 已被另一个应用程序使用。)。实际上你不能这样做,因为 kubernetes 只允许范围大于 30000 的 nodePort。
- 如果我的第一个问题的答案是“是”,那么是否可以配置 Ingress 以侦听节点上的其他端口。
是的,您可以使用任何其他端口(通常为 30000–32767)作为 NodePort 来公开您的入口服务,在这种情况下,您必须使用 url,例如 http://host_machin_IP:NodePort
。
我正在阅读 Kubernetes document about ingress。
如果我没理解错的话,Ingress会将节点的流量转发给Kubernetes中的服务。例如,当向节点的端口 80 发送 HTTP 请求时,入口会将数据转发给服务。
我的问题是:
- 这是否意味着入口将占用节点的80端口?那如果我有别的应用想使用80端口会报错吗?
- 如果我的第一个问题的答案是“是”,那么是否可以配置 Ingress 以侦听节点上的其他端口。
Ingress 是一种配置或路由映射,但您需要一个 IngressController 来完成实际的路由部分。
在您查看的示例中,它给出了将 http 路径 /testpath
映射到端口 80
上名为 test
的服务的规则;以便特定服务可以满足发送到 /testpath
url.
如果您对入口感兴趣,我假设您有兴趣将外部流量引入您的集群。因此,有必要提供 nodeport 类型的服务,以允许您的入口通过节点上的端口访问您的 pod/容器上的端口。是的,这确实意味着它占用了节点上的端口。然而,这不是您感兴趣的部分,因为节点的端口与您的 pod 上的端口不同。 page 提供了一个很好的示例,说明了节点端口的一般工作方式。
如果您打算在集群中使用不同的应用程序。您可能会使用两个单独的 nodePort 服务定义两个入口,这些服务会自动管理每个 k8s 节点上的端口管理。 如果您真的对手动设置感兴趣,那么您可以采用这样的解决方案1:
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
在k8s中,没有端口x80xx已经被另一个应用程序使用。
现在让我解释一下原因: 如你所知,你必须有一个服务来暴露你的 application/pods 运行 在 k8s cluster.Here,你创建的每个服务都会有一个唯一的新 k8s 集群内部 ip 分配给 it.So 如果您有另一个具有相同端口的服务,您将不会收到该错误(端口 x80xx 已被另一个应用程序使用)。因为仅当两个应用程序尝试获取相同的 ip 和端口(套接字)时才会引发该特定错误。
现在进入入口点: 基本上入口是基于 k8s 集群中的入口控制器 pods 运行 实现的,是的它有一个 service.So 你可以将它分配给任何服务端口(有 pre-defined 端口)因为它将为其分配新的集群 ip。
现在将您的服务暴露在集群之外: 要在集群外公开您的服务,您可以使用 serviceType 负载均衡器和节点端口。
NodePort: NodePort 是你的每个节点上的一个开放端口 cluster.As 这是你的节点(主机)的一个端口,你不能分配一个端口到多个服务,因为这不会有不同的 ip 而不是单个本地主机 ip。
问题的回答:
- 这是否意味着入口将占用节点的80端口?那如果我有别的应用要使用80端口会报错吗?
是的,如果您使用 nodePort 80 公开您的入口控制器服务,则没有其他服务可以使用此端口(Port x80xx 已被另一个应用程序使用。)。实际上你不能这样做,因为 kubernetes 只允许范围大于 30000 的 nodePort。
- 如果我的第一个问题的答案是“是”,那么是否可以配置 Ingress 以侦听节点上的其他端口。
是的,您可以使用任何其他端口(通常为 30000–32767)作为 NodePort 来公开您的入口服务,在这种情况下,您必须使用 url,例如 http://host_machin_IP:NodePort
。