2 votes

Comment configurer le DNS pour les Services et les Pods dans Kubernetes?

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.

1voto

Sebastian Points 33

J'ai réalisé ce travail en créant un Tunnel Cloudflare (anciennement appelé Argo Tunnel). Une documentation de configuration complète sur le tunnel peut être trouvée ici. J'espère que quelqu'un ayant un problème similaire trouvera cela utile.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X