【问题标题】:Can't access a pod from another pod using NodePort service无法使用 NodePort 服务从另一个 pod 访问 pod
【发布时间】:2020-07-14 08:16:56
【问题描述】:

我有一个非常简单的设置。我正在我的 PC 上使用 Docker Desktop Kubernetes 功能运行 Kubernetes。

  1. 有 2 个 pod 从 yaml 运行:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
  labels:
    app: my-nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-nginx
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx:alpine
  1. 从命令运行另一个 pod:kubectl run nginx-standalone --image nginx:alpine

  2. 有一个来自 yaml 的服务:

apiVersion: v1
kind: Service
metadata:
 name: nginx-nodeport
spec:
 type: NodePort
 selector:
    app: my-nginx
 ports:
 - port: 80
   targetPort: 80
   nodePort: 31000

基本上,由于标签选择器,服务仅“连接”到来自 yaml 部署的 pod。

我在做什么:

  1. 我“ssh”到 nginx-standalone
  2. 我安装了 curl(在 nginx-standalone 内部)
  3. 我尝试了以下方法(在 nginx-standalone 内部):
    1. curl nginx-nodeport - 效果很好,我得到了正确的回应
    2. curl nginx-nodeport:31000 - 不起作用,我得到 curl: (7) Failed to connect to nginx-nodeport port 31000: Connection refused

我不明白为什么第二个命令没有返回成功的 HTTP 响应。我知道31000 端口可以工作,因为我可以从我的主机PC 上做curl nginx-nodeport:31000。为什么它在 nginx-standalone pod 中不起作用?

【问题讨论】:

  • 操作系统?乌本图?红帽?

标签: docker kubernetes


【解决方案1】:

这是预期的行为,因为 nodePort 31000 正在侦听节点网络接口并且不存在于 pod 的网络接口中。如果您想通过 kubernetes 服务从另一个 pod 访问一个 pod,请使用 clusterIP 类型服务而不是 NodePort 类型。 NodePort 类型的服务应该用于将 kubernetes pod 暴露给 kubernetes 集群之外的消费者。

【讨论】:

  • 您可以从集群内部访问 NodePort 或 LoadBalancer 服务,但您需要使用集群内部的port:
  • 这些 NodePort 问题不断出现,我们可以重复使用现有的答案,我认为社区应该专注于重复使用答案并专注于回答新类型的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 2021-01-02
  • 1970-01-01
  • 2020-05-19
  • 2021-07-02
相关资源
最近更新 更多