3 votes

Ajout d'une origine de contrôle d'accès à Kubernetes

J'essaie d'autoriser le contrôle d'accès à l'origine en raison de l'erreur suivante dans une application Android Cordova :

http://localhost:8080/#/: Line 0 : Access to XMLHttpRequest at 'https://api.v2.domain.com/api/v1/users/me/favorites?lat=42.5467&lng=-83.2113&radius=10.0&limit=5&search=' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

J'essaie de trouver où l'ajouter dans Kubernetes - je suppose que c'est quelque part dans le service ou le déploiement.

Voici les deux :

apiVersion: v1
kind: Service
metadata:
  name: domain-server
  annotations:
    dns.alpha.kubernetes.io/external: "api.v2.domain.com"
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-east-2:152660121739:certificate/8efe41c4-9a53-4cf6-b056-5279df82bc5e
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
spec:
  type: LoadBalancer
  selector:
    app: domain-server
  ports:
    - port: 443
      targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: domain-server
spec:
  replicas: 2
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 3
  revisionHistoryLimit: 10
  template:
    metadata:
      labels:
        app: domain-server
    spec:
      containers:
        - name: domain-server
          image: "152660121739.dkr.ecr.us-east-2.amazonaws.com/domain-server"
          imagePullPolicy: Always
          resources:
            limits:
              memory: "1200Mi"
            requests:
              memory: "900Mi"
              cpu: "200m"
          ports:
            - name: http
              containerPort: 8080
     ...

Est-ce l'endroit correct pour mettre l'en-tête ? Si oui, comment ajouter CORS à Kubernetes ici ? Je remarque certaines suggestions comme Nginx ingresses, mais l'application que j'utilise n'utilise pas Nginx.

1voto

Akin Ozer Points 749

Ce problème ne concerne pas Kubernetes. Les navigateurs appliquent CORS, vérifiez la référence ici : https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS . Vous pouvez également utiliser bouclette o facteur et voir le contenu sans erreur CORS.

Normalement, les serveurs nginx peuvent résoudre ce problème et kubernetes-nginx n'est pas vraiment différent. Il utilise essentiellement un proxy inverse pour contrôler les services. Consultez cette référence pour commencer à corriger l'erreur CORS par ingress : https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#enable-cors

0voto

Malgorzata Points 3804

Ce serait beaucoup plus facile si vous utilisez Nginx, que vous aurez à ajouter juste ces annotations dans le fichier de configuration du service :

nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS"
nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
nginx.ingress.kubernetes.io/configuration-snippet: |
   more_set_headers "Access-Control-Allow-Origin: $http_origin";

Mais dans votre cas, il semble que le problème soit davantage lié à CORS qu'à Kubernetes. cors-article . Vous devez activer CORS.

Vous pouvez modifier le fichier yaml du serveur API de Kubernetes, pour que CORS fonctionne.

Ajouter une ligne --cors-allowed-origins=["http://*"] argument pour /etc/default/kube-apiserver o /etc/kubernetes/manifests/kube-apiserver.yaml cela dépend de l'emplacement de votre fichier de configuration kube-apiserver.

spec:
containers:
- command:
  - kube-apiserver
  - --cors-allowed-origins=["http://*"]

Puis redémarrer kube-apiserver.

Ensuite, changez l'annotation dns.alpha.kubernetes.io/external: "api.v2.domain.com" a dns.alpha.kubernetes.io/external: "http://api.v2.domain.com" dans le fichier de configuration de votre service et appliquer les changements.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X