ClusterIP是否能够负载均衡多个Pod的流量?

时间:2020-01-21 10:46:11

标签: kubernetes

我用ReplicaSet创建了一个replicas = 3。这些pod internal-pod-ainternal-pod-binternal-pod-c仅用于内部需求。然后,我创建了一种ClusterIP类型的服务,用于将请求路由到Pod。

出于测试目的,我尝试查看流量如何分配。端口转发后,我对服务执行了几个请求:

kubectl port-forward svc/internal-service-cip 8081:80 -n prod

所有请求均在同一吊舱internal-pod-a上进行。

所以我很困惑,为什么ClusterIP将所有请求发送到同一吊舱?

k8s清单:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  namespace: prod
  name: internal-pod
  labels:
    app: internal-pod
    environment: prod
spec:
  replicas: 3
  selector:
    matchLabels:
      app: internal-pod
      environment: prod
  template:
    metadata:
      labels:
        app: internal-pod
        environment: prod
    spec:
      containers:
      - name: internal-pod
        image: bla-bla-repo
        ports:
        - containerPort: 8080
-----------------------------
apiVersion: v1
kind: Service
metadata:
  namespace: prod
  name: internal-service-cip
spec:
  type: ClusterIP
  selector:
    app: internal-pod
  ports:
  - name: http
    port: 80
    targetPort: 8080
    protocol: TCP

1 个答案:

答案 0 :(得分:4)

通常,Service 确实提供跨所选Pod的负载平衡。您可以使用调试外壳看到此信息:

kubectl run --namespace=prod debug \
            --generator=run-pod/v1 \
            --image=busybox --rm --stdin --tty -- \
            /bin/sh
wget -O- http://internal-service-cip/

(第一个命令是与docker run --rm -it busybox sh等效的Kubernetes,但在您的Kubernetes命名空间中启动它。)

在引擎盖下,kubectl port-forward总是连接到某个单一的Pod(重点是我的):

将一个或多个本地端口转发到Pod 。 ...如果有多个符合条件的广告连播,则会自动选择一个广告连播。

因此,如果您kubectl port-forward service/internal-service-cip在内部查看服务的端点,则选择匹配的Pod之一,然后端口转发到该Pod。由于每个连接都连接到同一个Pod,因此在这种情况下似乎没有负载平衡。

相关问题