web-dev-qa-db-fra.com

Kubernetes ingress configuration de plusieurs hôtes

J'ai mis en place deux services et déploiements kubernetes simples - frontend et api. Le frontend obtient des données de l'API, donc j'expose également l'API afin que je puisse coder en dur l'URL d'entrée du backend dans l'appel de récupération des données du frontend (si quelqu'un connaît une meilleure façon de le faire en interne dans le cluster, veuillez me le faire savoir).

J'essaie de configurer différents noms d'hôte pour différents services, mais pour une raison quelconque, un seul des noms d'hôtes fonctionne.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-webapp-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - Host: test-webapp-frontend.com
    http:
      paths:
        - path: /
          backend:
            serviceName: test-webapp-frontend-lb
            servicePort: 8002
  - Host: test-webapp-api.com
    http:
      paths:
        - path: /get
          backend:
            serviceName: test-webapp-api-lb
            servicePort: 8001

Et voici ce que j'obtiens après avoir exécuté kubectl get svc

NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes                ClusterIP      10.96.0.1        <none>        443/TCP          2d
test-webapp-api-lb        LoadBalancer   10.107.60.163    <pending>     8001:30886/TCP   1h
test-webapp-frontend-lb   LoadBalancer   10.104.100.108   <pending>     8002:31431/TCP   1h

J'utilise minikube sur mon local pour exécuter ce cluster. Je peux accéder à la fois à l'interface et à l'API en exécutant minikube service test-webapp-frontend-lb et minikube service test-webapp-api-lb.

Quand je vais à test-webapp-frontend.com, Je peux voir la page frontend mais je ne peux pas accéder à test-webapp-api.com. Pas même l'erreur par défaut introuvable, je ne peux tout simplement pas y accéder comme si l'URL n'existait tout simplement pas.

La chose étrange est, si je fais ça,

spec:
  rules:
  - Host: test-webapp-frontend.com
    http:
      paths:
        - path: /
          backend:
            serviceName: test-webapp-frontend-lb
            servicePort: 8002
  - Host: test-another-frontend.com
    http:
      paths:
        - path: /
          backend:
            serviceName: test-webapp-frontend-lb
            servicePort: 8002

Je peux toujours accéder à test-webapp-frontend.com mais test-another-frontend.com a le même problème, ne peut pas y accéder du tout.

Qu'est-ce que je fais mal??

5
mkim

Cela ressemble à un problème DNS. Ces noms d'hôte comme "test-webapp-frontend.com" doivent être résolus vers l'adresse IP du contrôleur d'entrée pour acheminer le trafic vers le cluster. Je ne vois pas d'IP externe répertoriée dans votre sortie pour un contrôleur d'entrée. Pour minikube, vous pouvez activer le module complémentaire d'entrée. Le DNS est un peu plus délicat avec minikube car vous n'avez pas d'adresse IP publique à résoudre. Vous pouvez modifier votre fichier etc/hosts pour résoudre les noms ou utiliser des règles basées sur le chemin d'accès à la place.

Quelques utiles liens sur ceci

4
Ryan Dawson