为什么 Kubernetes(AWS EKS)将所有工作程序注册到负载均衡器?

为什么 Kubernetes(AWS EKS)将所有工作程序注册到负载均衡器?

我想知道这是默认行为还是我的设置有问题。

我在 kubernetes 上运行了 150 个工作程序。

我使用 nodeSelector 让一组 kubernetes 工作进程(10 个工作进程)仅运行特定的部署,并为其创建了一个服务(type=LoadBalancer),当创建负载均衡器时,Kubernetes 的所有 150 个工作进程都注册到了负载均衡器,而我原本期望只看到此部署/服务的这一组工作进程(10 个工作进程)。

alb-ingress-controller它的行为与和相同AWS NLB

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
  - port: 8080
  type: LoadBalancer

和部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  selector:
    matchLabels:
      app: my-app
  replicas: 10
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: master-api
        image: private/my-app:prod
        resources:
          requests:
            memory: 8000Mi
        ports:
        - containerPort: 8080
      nodeSelector:
        role: api 

我已为 10 个工作节点贴上了标签,role=api 这 10 个节点仅运行此部署的 pod,并且没有其他工作节点正在运行此服务,我也没有其他服务或容器使用端口 8080

答案1

这是正常的。当 kubernetes 配置负载均衡器时,它会将所有节点配置为后端服务的一部分。负载均衡器不知道或不关心哪些节点正在运行哪些 pod。您可以将其视为将流量路由到(作为一个整体)而不是特定的工作负载。一旦流量到达集群,它就能够根据集群及其工作负载的当前状态智能地路由到正确的 pod。

相关内容