【问题标题】:Why is my service always routing to the same pod?为什么我的服务总是路由到同一个 pod?
【发布时间】:2022-11-04 02:52:23
【问题描述】:

我有一个简单的 Web 服务器,它使用 OUT env var 公开它所在的 pod 名称。

部署和服务如下所示:

apiVersion: v1
kind: Service
metadata:
  name: simpleweb-service
spec:
  selector:
    app: simpleweb
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: simpleweb-deployment
  labels:
    app: simpleweb
spec:
  replicas: 3
  selector:
    matchLabels:
      app: simpleweb
  template:
    metadata:
      labels:
        app: simpleweb
    spec:
      containers:
      - name: simpleweb
        env:
          - name: OUT
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
        imagePullPolicy: Never
        image: simpleweb
        ports:
        - containerPort: 8080

我将它部署在我的本地 kind cluster

default   simpleweb-deployment-5465f84584-m59n5 1/1     Running   0   12m
default   simpleweb-deployment-5465f84584-mw8vj 1/1     Running   0   9m36s
default   simpleweb-deployment-5465f84584-x6n74 1/1     Running   0   12m

并通过

kubectl port-forward service/simpleweb-service 8080:8080

当我点击localhost:8080 时,我总是会到达同一个吊舱

问题:

  • 我的服务不是循环吗?
  • 是否有一些我不知道的缓存
  • 我必须以不同的方式公开我的服务吗?这是一个善意的问题吗?

【问题讨论】:

标签: kubernetes service kind


【解决方案1】:

port-forward 只会为服务选择器选择第一个 pod。如果你想要循环,你需要使用像 traefik 或 nginx 这样的负载均衡器。

https://github.com/kubernetes/kubectl/blob/652881798563c00c1895ded6ced819030bfaa4d7/pkg/polymorphichelpers/attachablepodforobject.go#L52

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 2013-03-04
    • 2020-10-15
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2023-03-14
    相关资源
    最近更新 更多