kubernetes无法在节点之间转发数据包

时间:2019-01-15 09:11:02

标签: kubernetes

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

我正在用“ curl'工作节点的IP:30300”测试系统,我已经体验到大约50%的请求已由nginx服务器正确处理,但另一半返回错误:“ curl: (7)无法连接到192.168.0.151:30300:主机没有路由。 我怀疑当调度程序返回在当前工作程序节点(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

1 个答案:

答案 0 :(得分:0)

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