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,你有几种可能的解决方案:
解决方案
-
移除
server-snippet
注解:
如果你不严格需要server-snippet
,你可以删除这个注解,并重新应用 Ingress 资源。 -
启用 Snippet:
如果你确实需要使用server-snippet
,可以联系集群管理员,要求他们在 Nginx Ingress 控制器的配置中启用 Snippet。需要修改 Nginx Ingress 控制器的 ConfigMap 配置。 -
使用 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:
-
编辑 Nginx Ingress 控制器的 ConfigMap:
找到 Nginx Ingress 控制器的 ConfigMap 通常名为
nginx-ingress-controller
或类似名称。kubectl edit configmap nginx-ingress-controller -n <namespace>
-
启用 Snippet:
在 ConfigMap 中添加或修改以下配置:
data: enable-snippets: "true"
-
重启 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,成功