You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非Deployment管理的Pod用NodePort扩缩容问题及配置排查

问题解答

1. 扩缩容无Deployment管理的Pod是否必须用Deployment?

不是必须,但Deployment是最适合的生产级方案:

  • 手动创建的Pod没有自愈能力,Pod意外挂掉后不会自动重建,扩缩容只能手动逐个创建/删除,效率极低且易出错。
  • 除了Deployment,也可以用ReplicaSet实现基础的扩缩容和Pod自愈,但Deployment在ReplicaSet之上额外提供了滚动更新、版本回滚等核心功能,更适配实际业务场景。
  • 若需要稳定的扩缩容能力,优先选择Deployment,不建议长期手动管理Pod。

2. 改用Deployment+NodePort后访问失效的原因及修复

你的配置核心问题是Service标签选择器与Pod标签不匹配:

  • Deployment的Pod模板定义的标签是run: my-gateway、run: my-adm-contact
  • 但Service的selector使用的是app: my-gateway、app: my-adm-contact
    这种不匹配会导致Service无法找到对应的Pod,无法转发流量,最终访问失效。

修正后的配置

修正后的Deployment(统一Pod标签与Service选择器)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-gateway
  labels:
    app: my-gateway
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-gateway  # 同步修改为app标签,与Service选择器对齐
  template:
    metadata:
      labels:
        app: my-gateway  # 修改为app标签,匹配Service选择器
    spec:
      containers:
      - name: my-gateway
        image: rafaelribeirosouza86/shopping:api-gateway
        imagePullPolicy: Always
        ports:
        - containerPort: 31534
          protocol: TCP
      imagePullSecrets:
        - name: regcred

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-adm-contact
  labels:
    app: my-adm-contact
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-adm-contact  # 同步修改为app标签,与Service选择器对齐
  template:
    metadata:
      labels:
        app: my-adm-contact  # 修改为app标签,匹配Service选择器
    spec:
      containers:
      - name: my-adm-contact
        image: rafaelribeirosouza86/shopping:my-adm-contact
        imagePullPolicy: Always
        ports:
        - containerPort: 30001
          protocol: TCP
      imagePullSecrets:
        - name: regcred

修正后的Service(保持选择器不变,与修正后的Pod标签匹配)

apiVersion: v1
kind: Service
metadata:
  name: my-adm-contact-service
  namespace: default
spec:
  ports:
  - port: 30001
    protocol: TCP
    targetPort: 30001
    nodePort: 30001
  selector:
    app: my-adm-contact
  type: NodePort

---

apiVersion: v1
kind: Service
metadata:
  name:  my-gateway-service
  namespace: default
spec:
  ports:
  - port: 31534
    protocol: TCP
    targetPort: 31534
    nodePort: 31534
  selector:
    app: my-gateway
  type: NodePort

验证修复

应用修正后的配置后,执行以下命令确认Service与Pod关联正常:

# 查看Service的端点,应显示对应Pod的IP
kubectl get endpoints my-gateway-service
kubectl get endpoints my-adm-contact-service

若端点中存在Pod IP,说明关联成功,此时使用ipv4:nodePorts/url-microservice即可正常访问。

内容的提问来源于stack exchange,提问作者Rafael Souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:09:12