4
votes

Kubernetes: ERR_NAME_NOT_RESOLVED

J'ai déployé une application mongo db, Spring Boot BE, Angular dans GKE. Mon service FE est un équilibreur de charge, il doit se connecter à mon BE pour obtenir des données mais j'obtiens une erreur de console dans mon navigateur: GET http: //contactbe.default.svc.cluster.local/contacts net :: ERR_NAME_NOT_RESOLVED . Mon FE doit consommer le point de terminaison / contacts pour obtenir des données. J'utilise le DNS de mon service BE (contactbe.default.svc.cluster.local) dans mon application Angular. C'est mon fichier yml que j'ai utilisé pour créer mon déploiement:

apiVersion: v1
kind: Service
metadata:
  name: mongo
  labels:
    run: mongo
spec:
  type: NodePort
  ports:
  - port: 27017
    targetPort: 27017
    protocol: TCP
  selector:
    run: mongo
---
apiVersion: apps/v1beta1
kind: Deployment
metadata: 
  name: mongo
spec:
  template:
    metadata:
      labels:
        run: mongo
    spec:
      containers:
      - name: mongo
        image: mongo
        ports:
        - containerPort: 27017
---        
apiVersion: v1
kind: Service
metadata:
  name: contactbe
  labels:
    app: contactbe
spec:
  type: NodePort 
  ports:
  - port: 8181
    targetPort: 8181
    protocol: TCP
  selector:
    app: contactbe
---
apiVersion: apps/v1beta1
kind: Deployment
metadata: 
  name: contactbe
spec:
  template:
    metadata:
      labels:
        app: contactbe
    spec:
      containers:
      - name: contactbe
        image: glgelopfalcon/k8s_contactbe:latest
        ports:
        - containerPort: 8181
---
apiVersion: apps/v1beta1 # for versions before 1.9.0 use apps/v1beta2 
kind: Deployment 
metadata: 
  name: angular-deployment 
spec: 
  selector: 
    matchLabels: 
      app: angular 
  replicas: 2 # tells deployment to run 2 pods matching the template 
  template: 
    metadata: 
      labels: 
        app: angular 
    spec: 
      containers: 
      - name: angular 
        image: glgelopfalcon/my-angular-app:latest 
        ports: 
        - containerPort: 80
--- 
# https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service  
kind: Service 
apiVersion: v1 
metadata: 
  name: angular-service 
spec: 
  selector: 
    app: angular 
  ports: 
  - port: 80
    targetPort: 80
    protocol: TCP
  type: LoadBalancer 

J'ai beaucoup cherché sur Google mais je n'ai toujours pas trouvé comment résoudre ce problème. J'apprécierais que quelqu'un puisse donner un coup de main.

Erreur de console


1 commentaires

Si je comprends bien, l'appel est passé de l'application angular-service à l'application contactbe via le service, n'est-ce pas? L'erreur implique un problème DNS. Connectez-vous à l'un des pods angulaires et exécutez la même requête: kubectl exec -it [angular_pod_name] - curl contactbe.default.svc.cluster.local: 8181 / contact . Vous pouvez utiliser wget à la place si angular n'a pas installé curl


3 Réponses :


1
votes

vérifiez que votre équilibreur de charge a ouvert le port 27017 comme demande d'envoi vers le port 27017

Sinon, vous pouvez changer le port du nœud de service sur 80 et le port cible sera le même


3 commentaires

Bonjour Harsh, je n'ai pas compris votre suggestion. Pourriez-vous s'il vous plaît donner plus de détails ou des extraits de code à ce sujet? Je suis un débutant en K8S. Merci d'avance.


vérifier le port ouvert sur l'équilibreur de charge


Mongo Db écoute le port 27017. Mon équilibreur de charge utilise le port 80. De plus, mon équilibreur de charge a Port Node Port Target Port Protocol 80 31011 80 TCP



0
votes

Le numéro de port est manquant dans l'URL. essayez ci-dessous

contactbe.default.svc.cluster.local:8181/contacts


7 commentaires

La même erreur apparaît: contactbe.default.svc.cluster.local: 8181 / contacts: 1 Échec du chargement de la ressource: net :: ERR_NAME_NOT_RESOLVED


pouvez-vous frapper l'url directement dans le pod contactbe comme ci-dessous et confirmer le résultat. curl localhost: 8181 / contacts


J'obtiens un résultat avec succès. curl localhost: 8181 / contacts [{"id": "01", "name": "Gerardo", "email": "gag@gmail.com", "phone" ‌: "1111", "lastName": "‌ Lopez"}] root @ contact‌ be-54d479d774-zf5b8: ‌ / usr / app # . Mmmm, je suis confus.


Qu'est-ce que ça veut dire? Le pod fonctionne mais pourquoi ne puis-je pas l'obtenir à partir de mon front-end?


Apparaît comme si les pods ne sont pas liés au service. Partager la sortie de 'kubectl get ep'


C'est le résultat de kubectl get ep : angular-service: 10.48.1.6:80,10.48.2.9:80. contactbe: 10.48.1.4:8181


Pouvez-vous frapper l'adresse IP de l'hôte et le nodeport dans le navigateur et partager la sortie. Ajoutez le résultat à votre question



0
votes

J'ai trouvé une solution. J'ai changé le type de service de mon backend. Au lieu de ClusterIP, j'utilise un équilibreur de charge, cela fonctionne comme prévu


0 commentaires