负载平衡无法正常工作

Load balancing is not working properly

我们要测试kubernetes负载均衡。因此,我们创建了一个 2 节点集群,即 运行s 容器的 6 个副本。容器有 运行ning apache2 服务器和 php 如果我们浏览 hostname.php

它会打印 pod 名称

集群详细信息: 172.16.2.92 -- 主从 172.16.2.91 -- 奴才

RC和服务详情:

前端-controller.json:

{
   "kind":"ReplicationController",
   "apiVersion":"v1beta3",
   "metadata":{
      "name":"frontend",
      "labels":{
         "name":"frontend"
      }
   },
   "spec":{
      "replicas":6,
      "selector":{
         "name":"frontend"
      },
      "template":{
         "metadata":{
            "labels":{
               "name":"frontend"
            }
         },
         "spec":{
            "containers":[
               {
                  "name":"php-hostname",
                  "image":"naresht/hostname",
                  "ports":[
                     {
                        "containerPort":80,
                        "protocol":"TCP"
                     }
                  ]

               }
            ]
         }
      }
   }
}

前端-service.json:

{
   "kind":"Service",
   "apiVersion":"v1beta3",
   "metadata":{
      "name":"frontend",
      "labels":{
         "name":"frontend"
      }
   },

   "spec":{
      "createExternalLoadBalancer": true,
      "ports": [
        {
          "port":3000,
          "targetPort":80,
          "protocol":"TCP"
        }
      ],
      "publicIPs": [ "172.16.2.92"],
      "selector":{
         "name":"frontend"
      }
   }
}

广告连播详细信息: frontend-01bb8、frontend-svxfl 和 frontend-yki5s 运行ning 在节点 172.16.2.91 上 frontend-65ykz 、 frontend-c1x0d 和 frontend-y925t 运行ning 在节点 172.16.2.92

如果我们浏览 172.16.2.92:3000/hostname.php,它会打印 POD 名称。

问题:

运行 watch -n1 curl 172.16.2.92:3000/hostname.php on node 172.16.2.92 只给出 pods(frontend-65ykz , frontend-c1x0d and frontend-y925t ).他们没有显示其他节点 172.16.2.91 pods。 运行 节点 172.16.2.91 上的相同命令仅给出 pods。他们没有显示其他节点 172.16.2.92 pods。 运行 集群外的相同命令仅显示 172.16.2.92 pods。 但是我们希望看到所有 pods 而不是特定节点 pods,如果我们 运行 任何地方。

查看下面的详细信息以获取更多信息,如果有任何问题可以帮助您

# kubectl 获取节点

NAME          LABELS                                           STATUS
172.16.2.91   kubernetes.io/hostname=172.16.2.91   Ready
172.16.2.92   kubernetes.io/hostname=172.16.2.92   Ready

# kubectl get pods

POD              IP            CONTAINER(S)   IMAGE(S)                                         HOST                      LABELS                                                              STATUS    CREATED          MESSAGE
frontend-01bb8   172.17.0.84                                                                   172.16.2.91/172.16.2.91   name=frontend                                                       Running   About a minute
                               php-hostname   naresht/hostname                                                                                                                               Running   About a minute
frontend-65ykz   10.1.64.79                                                                    172.16.2.92/172.16.2.92   name=frontend                                                       Running   About a minute
                               php-hostname   naresht/hostname                                                                                                                               Running   About a minute
frontend-c1x0d   10.1.64.77                                                                    172.16.2.92/172.16.2.92   name=frontend                                                       Running   About a minute
                               php-hostname   naresht/hostname                                                                                                                               Running   About a minute
frontend-svxfl   172.17.0.82                                                                   172.16.2.91/172.16.2.91   name=frontend                                                       Running   About a minute
                               php-hostname   naresht/hostname                                                                                                                               Running   About a minute
frontend-y925t   10.1.64.78                                                                    172.16.2.92/172.16.2.92   name=frontend                                                       Running   About a minute
                               php-hostname   naresht/hostname                                                                                                                               Running   About a minute
frontend-yki5s   172.17.0.83                                                                   172.16.2.91/172.16.2.91   name=frontend                                                       Running   About a minute
                               php-hostname   naresht/hostname                                                                                                                               Running   About a minute
kube-dns-sbgma   10.1.64.11                                                                    172.16.2.92/172.16.2.92   k8s-app=kube-dns,kubernetes.io/cluster-service=true,name=kube-dns   Running   45 hours
                               kube2sky       gcr.io/google_containers/kube2sky:1.1                                                                                                          Running   45 hours
                               etcd           quay.io/coreos/etcd:v2.0.3                                                                                                                     Running   45 hours
                               skydns         gcr.io/google_containers/skydns:2015-03-11-001                                                                                                 Running   45 hours

# kubectl 获取服务

NAME            LABELS                                                              SELECTOR           IP(S)           PORT(S)
frontend        name=frontend                                                       name=frontend      192.168.3.184   3000/TCP
kube-dns        k8s-app=kube-dns,kubernetes.io/cluster-service=true,name=kube-dns   k8s-app=kube-dns   192.168.3.10    53/UDP
kubernetes      component=apiserver,provider=kubernetes                             <none>             192.168.3.2     443/TCP
kubernetes-ro   component=apiserver,provider=kubernetes                            <none>             192.168.3.1     80/TCP

# iptables -t nat -L

Chain KUBE-PORTALS-CONTAINER (1 references)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             192.168.3.184        /* default/frontend: */ tcp dpt:3000 redir ports 50734
REDIRECT   tcp  --  anywhere             kube02               /* default/frontend: */ tcp dpt:3000 redir ports 50734
REDIRECT   udp  --  anywhere             192.168.3.10         /* default/kube-dns: */ udp dpt:domain redir ports 52415
REDIRECT   tcp  --  anywhere             192.168.3.2          /* default/kubernetes: */ tcp dpt:https redir ports 33373
REDIRECT   tcp  --  anywhere             192.168.3.1          /* default/kubernetes-ro: */ tcp dpt:http redir ports 60311

Chain KUBE-PORTALS-HOST (1 references)
target     prot opt source               destination
DNAT       tcp  --  anywhere             192.168.3.184        /* default/frontend: */ tcp dpt:3000 to:172.16.2.92:50734
DNAT       tcp  --  anywhere             kube02               /* default/frontend: */ tcp dpt:3000 to:172.16.2.92:50734
DNAT       udp  --  anywhere             192.168.3.10         /* default/kube-dns: */ udp dpt:domain to:172.16.2.92:52415
DNAT       tcp  --  anywhere             192.168.3.2          /* default/kubernetes: */ tcp dpt:https to:172.16.2.92:33373
DNAT       tcp  --  anywhere             192.168.3.1          /* default/kubernetes-ro: */ tcp dpt:http to:172.16.2.92:60311

谢谢

在我看来问题出在网络配置上。 Pods 主机 172.16.2.91 的 IP 地址为 172.17。0.xx 可以从其他主机访问,即 172.16.2.92

如果 ping 失败,请根据 kubernetes 要求检查您的网络: https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/networking.md Kubernetes 对任何网络实现都提出了以下基本要求(除非有意的网络分段策略): •所有容器都可以在没有 NAT 的情况下与所有其他容器通信 •所有节点都可以在没有NAT的情况下与所有容器通信(反之亦然) •容器看到自己的IP与其他人看到的IP相同

因为法兰绒不能正常工作所以

/root/kube/reconfDocker.sh on everynode

它将重新启动 docker 和 flannel 然后检查 ifconfig docker0 和 flannel0 网桥 IP 应该在同一个网络中。然后负载平衡将起作用。对我有用。