为什么我的本地 Kubernetes 集群需要一个 NodePort?

亚伦

请原谅我对网络的相对无知,但我已经阅读了很多文档,但仍然无法理解这一点(可能是由于缺乏网络背景)。

鉴于此 Dockerfile:

from node:lts-slim
RUN mkdir /code
COPY package.json /code/
WORKDIR /code
RUN npm install
COPY server.js /code/
EXPOSE 3000 
CMD ["node", "server.js"]

...这个部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web-pod
  template:
    metadata:
      labels:
        app: web-pod
    spec:
      containers:
      - name: web
        image: kahunacohen/hello-k8s
        ports:
        - containerPort: 3000
          protocol: TCP

和这项服务:

apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  type: NodePort
  selector:
    app: web-pod
  ports:
    - port: 80
      targetPort: 3000
      protocol: TCP
      name: http

我的理解是:

  1. 我的容器中的应用程序在 3000 上将自己暴露给外界
  2. 我的部署 yaml 说,“容器正在监听 3000”
  3. 我的服务说在内部将 3000 映射到端口 80,这是默认端口,因此您不必将该端口添加到主机。
  4. 我使用 NodePort 类型是因为在像 Docker Desktop 这样的本地集群上,它开箱即用,而不是 LoadBalancer。它在 30000-32767 之间向集群中的外部的每个节点(pod?)打开一个随机端口。该节点端口是我从外部访问我的应用程序的方式。例如本地主机:30543。

我的假设正确吗?如果服务在容器端口和外部世界之间进行映射,我不清楚为什么我无法在 localhost:80 或仅 localhost 访问我的应用程序?服务中 3000 和 80 之间的映射有什么意义?

简而言之,我为什么需要 NodePort?

大卫迷宫

有两个网络层,我们可以称之为“集群内”和“集群外”。Pod 和 Service 都有自己的 IP 地址,但这些仅在集群内部。您需要 NodePort 将请求从集群外部转发到集群内部。

在“真正的”Kubernetes 集群中,您会发出一个请求……

  1. ...to http://any-kubernetes-node.example.com:31245/,以您期望物理系统具有的方式使用“正常”IP 地址,连接到 NodePort 端口,该端口转发...
  2. ...to http://web-service.default.svc.cluster.local:80/,带有集群内部 IP 地址和服务端口,它查看它选择和转发的 pod...
  3. ...to http://10.20.30.40:3000/,使用任何匹配 pod 的集群内部 IP 地址和服务的目标端口。

containerPort:在群规格没有严格要求(但如果你给它name: http,那么你可以有指定服务targetPort: http,而不知道具体的端口号)。EXPOSE在 Dockerfile 中在这个序列中几乎没有任何意义。

此序列还为您提供了一些灵活性,无需知道事情在哪里运行。假设您有 100 个节点和 3 个 pod 副本;初始连接可以连接到任何节点,服务将转发到所有目标 Pod,您无需从调用者那里知道任何这些详细信息。

(为了完整起见,LoadBalancer 类型的服务请求在集群外创建负载均衡器;例如,AWS ELB。这将转发到上述步骤 1 中的任何集群节点。如果您不在云环境中并且集群不知道如何自动创建外部负载均衡器,它与NodePort相同。)

如果我们将其简化为本地 Kubernetes 安装(Docker Desktop、minikube、kind),唯一真正的区别是只有一个节点;底层基础设施仍然像一个多节点分布式集群一样构建。您访问服务的准确方式因这些安装而异。在 Docker Desktop 中,从主机系统,您可以localhost在第一步中将其用作“正常”“外部”节点 IP 地址。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我能否获得一个日志,该日志显示命中Kubernetes集群中的NodePort的请求的源IP?

来自分类Dev

无法使用NodePort访问本地kubernetes集群中的服务

来自分类Dev

Kubernetes:为什么我的NodePort无法获得外部IP?

来自分类Dev

使用NodePort访问Azure Kubernetes集群

来自分类Dev

集群上的Kubernetes NodePort(Default_range + user_defined_range)或者它只能是一个范围

来自分类Dev

使用NodePort类型服务公开私有kubernetes集群

来自分类Dev

Kubernetes NodePort网络如何在多节点集群上工作?

来自分类Dev

Kubernetes NodePort不监听

来自分类Dev

Kubernetes 正在创建一个端口不正确的 nodeport 服务并且无法访问

来自分类Dev

在Kubernetes中,为什么NodePort的默认端口范围是30000-32767?

来自分类Dev

为什么Kubernetes群集在VM实例上Google Cloud无法将主机与NodePort连接?

来自分类Dev

Kubernetes服务NodePort未连接

来自分类Dev

Kubernetes NodePort不起作用

来自分类Dev

我们能否将kubernetes指向另一个集群

来自分类Dev

无法通过MicroK8s集群中的Kubernetes NodePort服务访问Express.js服务

来自分类Dev

Kubernetes-如何使用NodePort服务从集群外部访问Nginx负载平衡

来自分类Dev

具有Kops的AWS上的Kubernetes集群-NodePort服务不可用

来自分类Dev

Kubernetes如何使用Service.spec.externalTrafficPolicy =本地路由流量进行NodePort服务?

来自分类Dev

WebRTC 是一个 Kubernetes 集群

来自分类Dev

我应该在Kubernetes上的Traefik部署中使用NodePort吗?

来自分类Dev

Kubernetes中的ClusterIP,NodePort和LoadBalancer服务类型之间有什么区别?

来自分类Dev

一个人可以使用本地Kubernetes来管理部署在混合云中的集群吗?

来自分类Dev

为什么我的DataDog实例报告一个Kubernetes“ no_pod”?

来自分类Dev

Kubernetes:必须通信的多个容器 + 暴露的 nodePort

来自分类Dev

Kubernetes在Pod中获取NodePort映射

来自分类Dev

如何使用kubernetes NodePort从外部访问服务?

来自分类Dev

无法连接到 Kubernetes NodePort 服务

来自分类Dev

Kubernetes NodePort自定义端口

来自分类Dev

Kubernetes NodePort类型的端点和端口

Related 相关文章

  1. 1

    我能否获得一个日志,该日志显示命中Kubernetes集群中的NodePort的请求的源IP?

  2. 2

    无法使用NodePort访问本地kubernetes集群中的服务

  3. 3

    Kubernetes:为什么我的NodePort无法获得外部IP?

  4. 4

    使用NodePort访问Azure Kubernetes集群

  5. 5

    集群上的Kubernetes NodePort(Default_range + user_defined_range)或者它只能是一个范围

  6. 6

    使用NodePort类型服务公开私有kubernetes集群

  7. 7

    Kubernetes NodePort网络如何在多节点集群上工作?

  8. 8

    Kubernetes NodePort不监听

  9. 9

    Kubernetes 正在创建一个端口不正确的 nodeport 服务并且无法访问

  10. 10

    在Kubernetes中,为什么NodePort的默认端口范围是30000-32767?

  11. 11

    为什么Kubernetes群集在VM实例上Google Cloud无法将主机与NodePort连接?

  12. 12

    Kubernetes服务NodePort未连接

  13. 13

    Kubernetes NodePort不起作用

  14. 14

    我们能否将kubernetes指向另一个集群

  15. 15

    无法通过MicroK8s集群中的Kubernetes NodePort服务访问Express.js服务

  16. 16

    Kubernetes-如何使用NodePort服务从集群外部访问Nginx负载平衡

  17. 17

    具有Kops的AWS上的Kubernetes集群-NodePort服务不可用

  18. 18

    Kubernetes如何使用Service.spec.externalTrafficPolicy =本地路由流量进行NodePort服务?

  19. 19

    WebRTC 是一个 Kubernetes 集群

  20. 20

    我应该在Kubernetes上的Traefik部署中使用NodePort吗?

  21. 21

    Kubernetes中的ClusterIP,NodePort和LoadBalancer服务类型之间有什么区别?

  22. 22

    一个人可以使用本地Kubernetes来管理部署在混合云中的集群吗?

  23. 23

    为什么我的DataDog实例报告一个Kubernetes“ no_pod”?

  24. 24

    Kubernetes:必须通信的多个容器 + 暴露的 nodePort

  25. 25

    Kubernetes在Pod中获取NodePort映射

  26. 26

    如何使用kubernetes NodePort从外部访问服务?

  27. 27

    无法连接到 Kubernetes NodePort 服务

  28. 28

    Kubernetes NodePort自定义端口

  29. 29

    Kubernetes NodePort类型的端点和端口

热门标签

归档