Snippet directives are disabled by the Ingress administrator 解决办法

Error from server (BadRequest): error when creating "laptop-ingress.yaml": admission webhook "validate.nginx.ingress.kubernetes.io" denied the request: nginx.ingress.kubernetes.io/server-snippet annotation cannot be used. Snippet directives are disabled by the Ingress administrator

问了gpt给出的答案:

你遇到的问题是由于 Ingress 控制器(Nginx Ingress)禁止了 nginx.ingress.kubernetes.io/server-snippet 注解。为了继续使用 Ingress,你有几种可能的解决方案:

解决方案

  1. 移除 server-snippet 注解
    如果你不严格需要 server-snippet,你可以删除这个注解,并重新应用 Ingress 资源。

  2. 启用 Snippet
    如果你确实需要使用 server-snippet,可以联系集群管理员,要求他们在 Nginx Ingress 控制器的配置中启用 Snippet。需要修改 Nginx Ingress 控制器的 ConfigMap 配置。

  3. 使用 ConfigMap 配置
    如果需要配置 Nginx,可以考虑使用 Nginx Ingress 控制器的 ConfigMap,而不是注解。

详细步骤

1. 移除 server-snippet 注解

修改你的 laptop-ingress.yaml 文件,移除 nginx.ingress.kubernetes.io/server-snippet 注解。例如:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: laptop-ingress
  namespace: default
  annotations:
    # 删除或替换 server-snippet 注解
    # nginx.ingress.kubernetes.io/server-snippet: |
    #   add_header X-Frame-Options "SAMEORIGIN";
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: laptop-service
            port:
              number: 80

然后应用修改后的文件:

kubectl apply -f laptop-ingress.yaml

2. 启用 Snippet(需要管理员权限)

如果你有集群管理员权限,或者可以联系管理员,按照以下步骤启用 Snippet:

  1. 编辑 Nginx Ingress 控制器的 ConfigMap

    找到 Nginx Ingress 控制器的 ConfigMap 通常名为 nginx-ingress-controller 或类似名称。

    kubectl edit configmap nginx-ingress-controller -n <namespace>
    
  2. 启用 Snippet

    在 ConfigMap 中添加或修改以下配置:

    data:
      enable-snippets: "true"
    
  3. 重启 Nginx Ingress 控制器

    修改 ConfigMap 后,需要重启 Nginx Ingress 控制器 Pod:

    kubectl rollout restart deployment nginx-ingress-controller -n <namespace>
    

3. 使用 ConfigMap 配置

可以考虑将一些 Nginx 配置放到 Nginx Ingress 控制器的 ConfigMap 中,而不是使用注解。查看 Nginx Ingress 控制器的官方文档以了解详细配置方法。

结论

通过以上方法,你可以解决 nginx.ingress.kubernetes.io/server-snippet 注解被禁止的问题。如果你不是集群管理员,建议联系集群管理员寻求帮助。通过适当的配置和修改,你可以继续使用 Ingress 资源并实现所需功能。

上面是GPT给出的答案,针对我的集群,采用了第二种办法:

root@master:~/yaml/test/ingress# kubectl get configmap -n ingress-nginx 
NAME                       DATA   AGE
ingress-nginx-controller   4      3h17m
kube-root-ca.crt           1      3h17m
root@master:~/yaml/test/ingress# kubectl edit configmap -n ingress-nginx ingress-nginx-controller 
data:
  allow-snippet-annotations: "true"



configmap/ingress-nginx-controller edited
root@master:~/yaml/test/ingress# 
重新创建snippet,成功
posted @ 2024-06-24 13:45  jasmine456  阅读(18)  评论(0编辑  收藏  举报