L'ajout de serveurs de noms pour kubernetes
Je suis en utilisant Kubernetes v1.0.6 sur AWS, qui a été déployé à l'aide de kube-up.sh
.
Cluster à l'aide de kube-dns
.
$ kubectl get svc kube-dns --namespace=kube-system
NAME LABELS SELECTOR IP(S) PORT(S)
kube-dns k8s-app=kube-dns,kubernetes.io/cluster-service=true,kubernetes.io/name=KubeDNS k8s-app=kube-dns 10.0.0.10 53/UDP
Qui fonctionne très bien.
$ kubectl exec busybox -- nslookup kubernetes.default
Server: 10.0.0.10
Address 1: 10.0.0.10 ip-10-0-0-10.eu-west-1.compute.internal
Name: kubernetes.default
Address 1: 10.0.0.1 ip-10-0-0-1.eu-west-1.compute.internal
C'est le resolv.conf
d'une gousse.
$ kubectl exec busybox -- cat /etc/resolv.conf
nameserver 10.0.0.10
nameserver 172.20.0.2
search default.svc.cluster.local svc.cluster.local cluster.local eu-west-1.compute.internal
Est-il possible d'avoir les conteneurs utiliser un serveur de noms?
J'ai un DNS secondaire en fonction de découverte de service Oon disons 192.168.0.1) que j'aimerais que mes kubernetes conteneurs pour être en mesure d'utiliser pour la résolution dns.
ps. Un kubernetes 1.1 solution serait aussi acceptable 🙂
Je vous remercie beaucoup à l'avance,
George
Un moyen sûr de peut-être faire ce serait d'ajouter le serveur de noms dans skydns de configuration, juste ne sais pas comment cela sera fait lors de l'automatisation de la création d'un cluster/la mise à niveau via
kube-up/push
.OriginalL'auteur George Antoniadis | 2015-10-21
Vous devez vous connecter pour publier un commentaire.
La DNS addon README a certains détails à ce sujet. Fondamentalement, la gousse héritera de la
resolv.conf
réglage du nœud, il est en cours d'exécution, donc vous pouvez ajouter votre serveur DNS pour les nœuds'/etc/resolv.conf
. Lekubelet
prend également une--resolv-conf
argument qui peuvent fournir de façon plus explicite pour vous injecter le supplément de serveur DNS. Je ne vois pas le drapeau documenté partout, cependant.En outre, l'ajout de serveurs de noms pour
/etc/resolvconf/resolv.conf.d/base
sera en effet de les faire apparaître dans les conteneurs de/etc/resolv.conf
fichiers, mais depuis les deux premiers serveurs de noms qui kube injecte sont en place et en cours d'exécution, les nouveaux ne seront jamais interrogé.Je n'utilise pas le
kube-up.sh
processus de plus, afin de prendre ce que je dis avec un grain de sel (ouais, j'ai juste fait un jeu de mots). Mais je pense que pour automatiser cela, vous auriez probablement à maintenir une version modifiée du modèle de Sel àcluster/saltbase/salt/kubelet/default
qui définit l'option souhaitée pourmaster_kubelet_args
. Peut-être pas l'idéal sur le long terme, mais pourrait aider alors que vous voyez si c'est une solution.OriginalL'auteur rwehner
Dans Kuberenetes (probablement) 1.2, nous nous dirigeons vers un modèle où
nameservers
sont supposés être fongibles. Il y a trop de résolveurs qui se brisent lors de différents serveurs de noms servent les différents sous-ensembles de DNS, et il n'y a pas de véritable spécification ici que nous pourrons.En d'autres termes, nous allons commencer par arrêter l'hôte du serveur de noms enregistrements à partir du conteneur fusionné resolv.conf et de faire notre propre serveur DNS, le seul
nameserver
ligne. Notre DNS sera en mesure de transmettre des demandes en amont des serveurs de noms.Vous pouvez exécuter plusieurs répliques de votre serveur DNS, mais vous ne pouvez pas exécuter de multiples "différent" des serveurs DNS et de s'attendre à travailler, à moins qu'ils aient les mêmes données.
vrai, mais vous pouvez faire les deux serveurs ont les mêmes données... j'ai kube-dns avec deux services sur 10.3.0.10 et 10.3.0.11. Chaque service a un ou plusieurs pod répliques, il n'a pas vraiment d'importance. Ce qui a résolu notre problème de dns car quand un groupe est déplacée, certaines requêtes échouent lors de la transition, mais alors le système d'exploitation du client pod essaye l'autre serveur et de l'application ne voyez pas un échec. Le problème que nous avons à laisser le kubelet donner à ces deux serveurs de noms pour le pod. J'ai envisagé de servir l'ensemble de la resolv.conf mais alors nous ne manquez pas les champs de recherche qui sont en fonction sur l'espace de noms.
Le modèle actuel avec un seul serveur dns n'est vraiment pas bien fonctionner si les apps sont sensibles aux défaillances de dns, spécialement avec certains résolveurs comme musl alpin. Il est très facile à reproduire si vous voulez, je vais déposer une question avec des exemples de code
Question, puis-je créer un personnalisé resolv.conf de mon propre avec peut-être 8.8.8.8 et mon kube dns ip du service et de l'utiliser?
OriginalL'auteur Tim Hockin
Pour ceux avec la Kubernetes
kube-dns
, drapeau-nameservers
ni de la variable d'environnementSKYDNS_NAMESERVERS
ne sont plus disponibles.Maintenant, soit vous mettez votre nom sur les serveurs hôtes
resolv.conf
, de sorte que le DNS est héréditaire à partir du nœud, ou vous utilisez personnaliséresolv.conf
et l'ajouter à Kubelet avec le drapeau--resolv-conf
comme expliqué iciOriginalL'auteur amarruedo
J'ai finalement réussi à résoudre assez facilement par la configuration de SkyDNS pour ajouter un autre serveur de noms de domaine, vous pouvez simplement ajouter la variable d'environnement
SKYDNS_NAMESERVERS
tel que défini dans la SkyDNS docs dans votre SkyDNS réplication du contrôleur. Il a un impact minime et ne dépend pas de modifications du noeud etc.OriginalL'auteur George Antoniadis