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??
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.