मुझे GKE पर Kubernetes के साथ समस्या हो रही है। मैं आंतरिक DNS का उपयोग करके सेवाओं को उनके नाम से हल करने में असमर्थ हूं।

यह मेरा विन्यास है

गूगल जीकेई v1.15

kubectl get namespaces
NAME              STATUS   AGE
custom-metrics    Active   183d
default           Active   245d
dev               Active   245d
kube-node-lease   Active   65d
kube-public       Active   245d
kube-system       Active   245d
stackdriver       Active   198d

मैंने ओपनजेडके 11 डॉकर छवि के आधार पर कुछ सरल सेवाओं को तैनात किया है और वसंत बूट + एक्चुएटर के साथ बनाया है ताकि देव में परीक्षण करने के लिए/एक्ट्यूएटर/स्वास्थ्य अंतराल हो

kubectl get pods --namespace=dev
NAME                          READY   STATUS    RESTARTS   AGE
test1-5d86946c49-h9t9l        1/1     Running   0          3h1m
test2-5bb5f4ff8d-7mzc8        1/1     Running   0          3h10m

अगर मैं . के तहत निष्पादित करने का प्रयास करता हूं

kubectl --namespace=dev exec -it test1-5d86946c49-h9t9  -- /bin/bash
root@test1-5d86946c49-h9t9:/app# cat /etc/resolv.conf
nameserver 10.40.0.10
search dev.svc.cluster.local svc.cluster.local cluster.local europe-west1-b.c.back-office-236415.internal c.back-office-236415.internal google.internal
options ndots:5
root@test1-5d86946c49-h9t9:/app# nslookup test2
Server:         10.40.0.10
Address:        10.40.0.10#53

** server can't find test2: NXDOMAIN

एक ही समस्या तब होती है जब मैं test2 सेवा का उपयोग करने का प्रयास करता हूं और test1 को हल करने का प्रयास करता हूं। DNS समाधान को सक्षम करने के लिए नाम स्थान के लिए एक विशेष कॉन्फ़िगरेशन है? क्या यह स्वचालित नहीं होना चाहिए?

1
IlTera 20 पद 2019, 18:19

1 उत्तर

सबसे बढ़िया उत्तर

मैंने इसे मास्टर संस्करण 1.15 और 'क्लस्टरआईपी' के रूप में सेवा के प्रकार का उपयोग करके पुन: प्रस्तुत किया है। मैं एक सेवा के पॉड से दूसरी सेवा में देखने में सक्षम हूं। Google Kubernetes Engine क्लस्टर में Kubernetes Services बनाने के लिए [1] सहायक हो सकता है।

सेवाओं को देखने के लिए: $ kubectl svc प्राप्त करें --namespace=default

परिनियोजन तक पहुँचने के लिए: $ kubectl exec -it [पॉड नाम] sh

देखने के लिए: $ nslookup [सेवा का नाम]

क्लस्टर में परिभाषित प्रत्येक सेवा (स्वयं DNS सर्वर सहित) को एक DNS नाम सौंपा गया है। डिफ़ॉल्ट रूप से, क्लाइंट पॉड की DNS खोज सूची में पॉड का अपना नामस्थान और क्लस्टर का डिफ़ॉल्ट डोमेन शामिल होगा।

“सामान्य” (हेडलेस नहीं) सेवाओं को my-svc.my-namespace.svc.cluster-domain.example प्रपत्र के नाम के लिए DNS A रिकॉर्ड असाइन किया जाता है। यह सेवा के क्लस्टर IP का समाधान करता है।

"हेडलेस" के लिए (क्लस्टर आईपी के बिना) सेवाओं को एक नाम के लिए एक डीएनएस ए रिकॉर्ड भी सौंपा जाता है। हालांकि यह सेवा द्वारा चुने गए पॉड्स के आईपी के सेट को हल करता है।

हालाँकि, DNS नीतियों को प्रति-पॉड के आधार पर सेट किया जा सकता है। वर्तमान में Kubernetes निम्नलिखित पॉड-विशिष्ट DNS नीतियों का समर्थन करता है। इन नीतियों को पॉड स्पेक के dnsPolicy क्षेत्र में निर्दिष्ट किया गया है [2]:

"डिफ़ॉल्ट": पॉड उस नोड से नाम रिज़ॉल्यूशन कॉन्फ़िगरेशन प्राप्त करता है जिस पर पॉड चलता है।

"क्लस्टरफर्स्ट": कोई भी DNS क्वेरी जो कॉन्फ़िगर किए गए क्लस्टर डोमेन प्रत्यय से मेल नहीं खाती है, जैसे "www.kubernetes.io", को नोड से विरासत में मिले अपस्ट्रीम नेमसर्वर को अग्रेषित किया जाता है। क्लस्टर व्यवस्थापकों के पास अतिरिक्त स्टब-डोमेन और अपस्ट्रीम DNS सर्वर कॉन्फ़िगर किए गए हो सकते हैं।

"ClusterFirstWithHostNet": होस्टनेटवर्क के साथ चलने वाले पॉड्स के लिए, अपनी DNS नीति "ClusterFirstWithHostNet" सेट करने की आवश्यकता है।

"कोई नहीं": यह पॉड को कुबेरनेट्स वातावरण से DNS सेटिंग्स को अनदेखा करने की अनुमति देता है। सभी DNS सेटिंग्स को पॉड स्पेक में dnsConfig फ़ील्ड का उपयोग करके प्रदान किया जाना चाहिए।

[1]-https://cloud.google.com/ Kubernetes-engine/docs/how-to/expose-apps [2]-https:/ /kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-config

1
Shanewaz 21 पद 2019, 00:02