Si les services sous k8 doivent être accessibles par des systèmes externes, ils doivent être configurés pour autoriser l'accès entre domaines.
Lorsque vous effectuez une recherche sur Baidu, vous constaterez que de nombreuses introductions citent le contenu suivant :
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: MyServicesApp
labels:
app: MyServicesApp
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /MyServicesApp/$1
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-credentials: 'false'
nginx.ingress.kubernetes.io/cors-allow-headers: *
nginx.ingress.kubernetes.io/cors-allow-methods: GET, PUT, POST, DELETE, PATCH, OPTIONS
nginx.ingress.kubernetes.io/cors-allow-origin: http://*.xxx.com # 注意(s)与*不要通用,例如:http(s)://*.xxx.com 不支持
nginx.ingress.kubernetes.io/cors-expose-headers: '*' # 默认为空
nginx.ingress.kubernetes.io/cors-max-age: '600'
spec:
rules:
- host: xxx.xxx.com
http:
paths:
- path: /MyServicesApp/(.*)
pathType: ImplementationSpecific
backend:
service:
name: MyServicesApp-svc
port:
number: 8080
Quelqu'un ici a signalé que le cross-domain ne prend pas effet. Après avoir résolu le problème, j'ai découvert que dans l'élément de configuration cros-allow-headers, * ne signifie pas tous, mais tous les en-têtes de base. Si un en-tête personnalisé est utilisé, tel qu'un jeton xxx personnalisé, il doit être La déclaration est affiché ici, sinon il sera intercepté.
Il est donc recommandé de le remplacer par :
nginx.ingress.kubernetes.io/cors-allow-headers:APP-ID,content-type,LCDP-CSRF-TOKEN,LCDP-SIGNATURE,Referer,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization
La déclaration complète nécessite des en-têtes inter-domaines, ce qui peut essentiellement résoudre le problème.