Je suis en train de parcourir la documentation K8s sur le DNS pour les Services et Pods. La principale tâche que je veux résoudre est que mon déploiement K8s utilise NodePort
comme type de service. Cela signifie que j'utilise les adresses IP externes des nœuds pour exposer le service à Internet. Lorsque je fais cela, mon adresse IP est visible et je préférerais avoir un nom d'hôte [un nom DNS]. En parcourant la documentation liée ci-dessus, je ne comprends pas vraiment les concepts en raison du fait que je suis nouveau sur K8s.
J'ai mis en place un Contrôleur Ingress avec NGINX pour K8s Bare Metal car mon fournisseur de cloud ne fournit pas de service d'équilibrage de charge.
Ma question est donc: Comment mettre en place un ExternalDNS dans mon cluster K8s ?
Pour référence, voici mes ressources à l'intérieur du cluster K8s.
Espaces de noms
NOM STATUT ÂGE
par défaut Actif 3d12h
ingress-nginx Actif 5h53m
kube-node-lease Actif 3d12h
kube-public Actif 3d12h
kube-system Actif 3d12h
Essentiellement, j'ai tous mes déploiements à l'intérieur de l'espace de noms default
.
kubectl get all -n default
NOM PRÊT STATUT REDEMARRAGES ÂGE
pod/hello-docker-cc749b757-qfctr 1/1 En cours 0 70m
NOM TYPE CLUSTER-IP IP EXTERNE PORT(S) ÂGE
service/hello-docker NodePort 10.xxx.xxx.xxx 3000:30072/TCP 70m
service/kubernetes ClusterIP 10.xxx.xxx.xxx 443/TCP 3d12h
NOM PRÊT À JOUR DISPONIBLE ÂGE
deployment.apps/hello-docker 1/1 1 1 70m
NOM DÉSIRÉ ACTUEL PRÊT ÂGE
replicaset.apps/hello-docker-cc749b757 1 1 1 70m
Et voici le fichier de manifeste que j'ai pour le service et le déploiement de l'application hello-docker
:
apiVersion: v1
kind: Service
metadata:
name: hello-docker
labels:
app: hello-docker
spec:
type: NodePort
ports:
- port: 3000
targetPort: 8000
protocol: TCP
name: http
selector:
app: hello-docker
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-docker
labels:
app: hello-docker
spec:
replicas: 1
selector:
matchLabels:
app: hello-docker
template:
metadata:
labels:
app: hello-docker
spec:
imagePullSecrets:
- name: regcred
containers:
- name: hello-docker
image: sebastian/hello-docker:1.1
imagePullPolicy: Always
ports:
- containerPort: 8000
Tous les retours et suggestions seraient grandement appréciés.
0 votes
Quelle version de Kubernetes avez-vous utilisée ? Avez-vous utilisé une installation sur du matériel nu ou un fournisseur de cloud ?
0 votes
@MikolajS. J'ai utilisé un fournisseur de cloud. Ils ont un tutoriel pour la configuration initiale de K8s avec Ansible et Terraform mais n'ont pas de service de balance de charge. En ce qui concerne la version, c'est la v1.21
1 votes
Avez-vous un noeud IP prêt et souhaitez-vous écrire un nom de domaine - si tel est le cas, vous devriez le faire en dehors de Kubernetes - dépend de votre fournisseur - par exemple Amazon Route 53.
0 votes
Bonjour @Sebastian. Des mises à jour ?
0 votes
@WytrzymayWiktor, rien d'intéressant, en fait. Pour que cela fonctionne, j'ai mis en place un tunnel Cloudflare (alias Argo Tunnel) qui achemine le trafic via un contrôleur d'entrée. Le tunnel doit être maintenu en vie, donc j'ai fait en sorte que le tunnel passe par une instance de VM dans le cloud. Maintenant, le problème est que je peux accéder à mon nom d'hôte DNS mais je ne peux pas empêcher l'accès direct par IP.
1 votes
Si vous avez réussi à le faire fonctionner, envisagez d'ajouter votre solution en tant que réponse et de créer une nouvelle question avec le problème actuel.