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

Azure Kubernetes中Ingress更新及Deployment YAML报错排查求助

问题排查与解决方案

YAML文件核心错误点

  1. 根字段前导缩进:每个资源块(---之后)的apiVersion、kind等根字段前存在多余空格,YAML对缩进敏感,这会导致K8s无法解析正确的对象结构,是触发验证错误的主要原因。
  2. 资源限制配置无效:
    • Deployment中CPU限制写为'256',未指定单位(K8s中CPU单位为核心或毫核,如250m代表0.25核心),256核心远超常规节点配置,属于无效值。
    • Memory限制11400G明显不合理,建议调整为符合实际需求的单位(如256Mi)。
    • 资源请求cpu: '0'和memory: '0'会导致调度器无法合理分配资源,可能引发Pod调度失败,建议设置合理的最小请求值(如100m CPU、128Mi内存)。
  3. Ingress包含只读系统字段:从Azure Portal复制的Ingress包含uid、resourceVersion、generation、status等字段,这些是K8s内部维护的只读字段,用户提交YAML时不应包含,否则会触发验证错误。
  4. AGIC必要注解缺失:使用Application Gateway Ingress Controller(AGIC)时,Ingress必须添加kubernetes.io/ingress.class: azure/application-gateway注解,否则AGIC不会识别并同步该Ingress配置到Application Gateway。

修正后的YAML示例

Deployment与Service(deployment-service.yml)

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: new-kuber-endpoint
  namespace: kuber-ut
spec:
  replicas: 2
  selector:
    matchLabels:
      app: new-kuber-endpoint
  template:
    metadata:
      labels:
        app: new-kuber-endpoint
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      containers:
        - name: amica-endpoint
          image: mycontainerreg.azurecr.io/new-endpoint:20220707.1
          ports:
            - containerPort: 80
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
---
apiVersion: v1
kind: Service
metadata:
  name: new-kuber-endpoint-service
  namespace: kuber-ut
spec:
  type: ClusterIP  # 使用AGIC时无需LoadBalancer,ClusterIP即可满足后端访问
  ports:
    - targetPort: 80
      name: port80
      port: 80
      protocol: TCP
  selector:
    app: new-kuber-endpoint

Ingress(ingress.yml)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kuberdevingress
  namespace: kuber-ut
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway  # AGIC识别必备注解
spec:
  rules:
    - http:
        paths:
          - path: /old
            pathType: Prefix
            backend:
              service:
                name: old-endpoint-service
                port:
                  number: 80
          - path: /new
            pathType: Prefix
            backend:
              service:
                name: new-kuber-endpoint-service
                port:
                  number: 80

正确操作流程

  1. 确认命名空间存在:若kuber-ut命名空间未创建,执行命令:
    kubectl create namespace kuber-ut
    
  2. 部署Deployment与Service:
    kubectl apply -f deployment-service.yml
    
  3. 验证后端状态:检查Pod是否正常运行:
    kubectl get pods -n kuber-ut
    
    检查Service是否创建成功:
    kubectl get svc -n kuber-ut
    
  4. 部署修正后的Ingress:
    kubectl apply -f ingress.yml
    
  5. 确认AGIC同步状态:查看AGIC Pod运行状态:
    kubectl get pods -n kube-system -l app=ingress-azure
    
    查看AGIC日志确认配置同步情况:
    kubectl logs -n kube-system <agic-pod-name>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:45:43