【问题标题】:kubernetes not forwarding packets between nodesKubernetes不在节点之间转发数据包
【发布时间】:2019-01-15 09:11:02
【问题描述】:

我在 Oracle Virtualbox 中建立了一个 kubernetes 集群,其中一个主 VM(192.168.0.150)和两个工作 VM(.151 和 .152)通过 Virtualbox 的“桥接适配器”连接。 我使用的是法兰绒网络,pod 网络的 CIDR 是 10.244.0.0/16。 我创建了一个包含 4 个 nginx 服务器副本的部署,其中一个服务使用 nodePort 30300。

我正在使用“curl 'IP of worker node':30300”测试系统,我体验到大约 50% 的请求由 nginx 服务器正确处理,但另一半返回错误:“curl: (7) 无法连接到 192.168.0.151:30300: No route to host”。 我怀疑当调度程序返回一个在当前工作节点(具有在 curl 请求中使用的 IP 的节点)上运行的 pod 时请求得到服务,但是如果调度程序提供了一个位于另一个节点上的 pod,则数据包不会转发到该节点。

是否可以在没有外部负载均衡器的情况下使用带有多个工作节点的 nodePort 服务?

在这里您可以看到我用于创建部署和服务的 yaml 文件:

deployment.yaml:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.15.4
          ports:
            - containerPort: 80

service.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    app: nginx
spec:
  ports:
    - port: 8080
      targetPort: 80
      name: web
      nodePort: 30300
  type: NodePort
  selector:
    app: nginx

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    确切地说,使用NodePort 的目的不是使用外部负载平衡器,而是在您的子网中使用您自己的负载平衡器。你的配置没有问题。 为确保您的问题是集群网络,请尝试以下操作:您可以将副本缩放为“1”,然后以相同的方式检查两个 IP 地址。您需要从两个节点 IP 地址中获得答案。如果没有,请检查您的ports 和防火墙是否配置正确。此外,您可以查看用于部署 Kubernetes 集群或 kubeadm 的指南。

    【讨论】:

      猜你喜欢
      • 2019-07-04
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 2023-03-15
      • 2019-10-26
      • 1970-01-01
      相关资源
      最近更新 更多