我ReplicaSet用replicas = 3. 这些吊舱internal-pod-a,internal-pod-b,internal-pod-c服务仅限于内部需求。然后我创建了一个ClusterIP类型的服务来将请求路由到 pod。
出于测试目的,我试图查看流量将如何分布。端口转发后,我对服务执行了几个请求:
kubectl port-forward svc/internal-service-cip 8081:80 -n prod
Run Code Online (Sandbox Code Playgroud)
所有请求都在同一个 pod 上提供服务internal-pod-a。
所以我很困惑,为什么ClusterIP将所有请求发送到同一个 pod?
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
Run Code Online (Sandbox Code Playgroud)
通常,Service 确实会在选定的 pod 之间提供负载平衡。您可以使用调试外壳看到这一点:
kubectl run --namespace=prod debug \
--generator=run-pod/v1 \
--image=busybox --rm --stdin --tty -- \
/bin/sh
wget -O- http://internal-service-cip/
Run Code Online (Sandbox Code Playgroud)
(第一个命令与 Kubernetes 等效docker run --rm -it busybox sh,但在您的 Kubernetes 命名空间中启动它。)
在引擎盖下,kubectl port-forward始终连接到某个单个 pod(重点是我的):
将一个或多个本地端口转发到 pod。... 如果有多个 Pod 符合条件,则会自动选择一个 Pod。
因此,如果您kubectl port-forward service/internal-service-cip在内部查看服务的端点,选择匹配的 Pod 之一,并将端口转发到该 Pod。由于每个连接都指向同一个 Pod,因此在这种情况下似乎没有负载平衡。
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |