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

Ansible部署Kubernetes Ingress时遭遇YAML语法错误:mapping values are not allowed in this context

解决Ansible部署K8s Ingress时的YAML语法错误

我刚碰到过几乎一模一样的问题,来帮你排查下!你的错误提示「Syntax Error while loading YAML. mapping values are not allowed in this context」主要来自两个语法问题,逐一拆解如下:

1. Host字段的多余闭合大括号

你在spec.rules[0].host里写了"{MY_DOMAIN}}",这里多了一个额外的},这会直接触发YAML解析失败。如果MY_DOMAIN是Ansible变量,应该写成:

host: "{{ MY_DOMAIN }}"

如果是K8s侧的静态占位符(不需要Ansible解析),则改为:

host: "{MY_DOMAIN}"

2. Annotation中的特殊字符串解析冲突

错误提示指向的nginx.ingress.kubernetes.io/auth-url行,问题出在双引号包裹的字符串里包含:和$开头的变量占位符:
YAML解析器会把双引号内https://$host/...中的:误认为是新的键值对分隔符,再加上Ansible会尝试解析双引号内$开头的内容为自身变量,双重逻辑冲突导致了解析报错。

解决方法是把这两个annotation的值改用单引号包裹,让YAML将其识别为纯字符串,不进行任何变量解析或语法识别:

nginx.ingress.kubernetes.io/auth-url: 'https://$host/oauth2/auth'
nginx.ingress.kubernetes.io/auth-signin: 'https://$host/oauth2/start?rd=$escaped_request_uri'

修正后的完整Ingress任务代码

- name: Create K8s ingress
  k8s:
    api_version: networking.k8s.io/v1
    namespace: "{{ namespace }}"
    definition:
      kind: Ingress
      metadata:
        name: "{{ namespace }}-ingress"
        annotations:
          nginx.ingress.kubernetes.io/backend-protocol: HTTP
          nginx.ingress.kubernetes.io/auth-url: 'https://$host/oauth2/auth'
          nginx.ingress.kubernetes.io/auth-signin: 'https://$host/oauth2/start?rd=$escaped_request_uri'
          nginx.ingress.kubernetes.io/force-ssl-redirect: 'false'
          nginx.ingress.kubernetes.io/hsts: 'false'
          nginx.ingress.kubernetes.io/ssl-redirect: 'false'
          nginx.ingress.kubernetes.io/websocket-services: core-service
          nginx.org/websocket-services: core-service
      spec:
        rules:
        - host: "{{ MY_DOMAIN }}"
          http:
            paths:
            - backend:
                service:
                  name: "wordpress"
                  port:
                    number: 80
              path: /
              pathType: ImplementationSpecific

额外说明

K8s Ingress的annotation值本质都是字符串,所以像'false'这种用单引号包裹布尔值的写法是正确的,能避免YAML将其解析为布尔类型导致K8s API报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:37:49