Google कुबेरनेट इंजन में कुबेरनेट्स लोड बैलेंसर का बाहरी आईपी पता कैसे चुनें


16

मैं Google Kubernetes इंजन का उपयोग करके एक वेब ऐप परिनियोजित कर रहा हूं और मैं इसे मौजूदा स्थिर IP पते पर लोड बैलेंसर के माध्यम से सुलभ बनाना चाहता हूं जिसे मैं Google क्लाउड प्लेटफ़ॉर्म में उसी प्रोजेक्ट के भाग के रूप में नियंत्रित करता हूं, क्योंकि डोमेन नाम का मैं उपयोग करना चाहता हूं पहले से ही इस आईपी को इंगित करता है।

फली के लिए मैंने जिस याम्ल फ़ाइल का उपयोग किया है वह है:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: gcr.io/my-project/my-app:latest

मैं एक लोड बैलेंसर सेट कर सकता हूँ:

apiVersion: v1
kind: Service
metadata:
  name: my-load-balancer
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: my-app
  type: LoadBalancer

यह एक बाहरी आईपी प्रदान करता है, जिस पर ऐप सुलभ है, लेकिन मुझे जो आईपी चाहिए, उसका उपयोग करने के लिए इसे कॉन्फ़िगर करने का कोई तरीका नहीं मिल सकता है। सेवाओं प्रलेखन एक spec.clusterIP सेटिंग का उल्लेख है, लेकिन यह बाहरी IP से संबंधित प्रतीत नहीं होता है। इसी तरह, लोड बैलेंसर सेट हो जाने के बाद, सेवा की स्थिति .loadBalancer.ingress.ip फ़ील्ड अपने बाहरी IP पते पर सेट हो जाती है, लेकिन यह कॉन्फ़िगरेशन सेटिंग नहीं लगती है।

एक विकल्प के रूप में, मैंने अपने स्थिर आईपी पते से कुबेरनेट्स द्वारा स्थापित लक्ष्य पूल तक सीधे यातायात के लिए Google कंप्यूट इंजन कंसोल में एक अग्रेषण नियम बनाने का मैन्युअल रूप से प्रयास किया, लेकिन जब मैं कनेक्शन को जोड़ने का प्रयास करता हूं तो इनकार कर दिया जाता है।

क्या कोई तरीका है जो मैं चाहता हूं - एक चुने हुए स्थिर आईपी पते पर Google कुबेरनेट इंजन पर कुबेरनेट्स पॉड (या प्रतिकृति नियंत्रक) को उजागर करने के लिए?

जवाबों:


9

TL, DR Google कंटेनर इंजन, जो कि कुबेरनेट्स v1.1 चला रहा है, पहले स्थिरloadBalancerIP रूप में ऑटो-असाइन किए गए आईपी को चिह्नित करता है ।

Kubernetes v1.1 का समर्थन करता है externalIPs :

apiVersion: v1
kind: Service
spec:
  type: LoadBalancer
  loadBalancerIP: 10.10.10.10
  ...

अब तक GCE पर इसका उपयोग करने के बारे में कोई बहुत अच्छा सुसंगत दस्तावेज नहीं है। क्या सुनिश्चित है कि यह आईपी पहले आपके पूर्व-आवंटित स्थिर आईपी ​​में से एक होना चाहिए ।

पार क्षेत्र लोड संतुलन प्रलेखन कंप्यूट इंजन और नहीं Kubernetes / कंटेनर इंजन के लिए ज्यादातर है, लेकिन यह अभी भी उपयोगी है विशेष रूप से भाग "विन्यस्त लोड संतुलन सेवा"।

यदि आप जीसीई पर सिर्फ कुबेरनेट्स लोडबैलेंसर बनाते हैं, तो यह एक नेटवर्क कंप्यूट इंजन बनाएगा> नेटवर्क> नेटवर्क लोड संतुलन> फॉरवर्डिंग रूल आपके क्लस्टर पर आपके मशीनों से बने एक लक्ष्य पूल की ओर इशारा करता है (आमतौर पर केवल जो पॉड्स चला रहे हैं जो सेवा चयनकर्ता से मेल खाते हैं) । ऐसा लगता है कि किसी नेमस्पेस को हटाना उन बनाए गए नियमों को अच्छी तरह से साफ नहीं करता है।


अपडेट करें

यह वास्तव में अब समर्थित है (भले ही दस्तावेज के तहत):

  1. जांच करें कि आपने Kubernetes 1.1 या बाद में (के तहत चलाए जा रहे GKE अपने क्लस्टर संपादित करें और जाँच "नोड संस्करण")
  2. नेटवर्किंग> बाहरी IP पते के तहत आपके पास पहले से ही कुछ एपिहेरल होना चाहिए जो आपके क्लस्टर के VM उदाहरण की ओर इशारा करते हुए चिह्नित किया गया है (यदि नहीं या अनिश्चित है, तो एक बार के बिना परिनियोजित loadBalancerIPकरें, जब तक आप बाहरी आईपी आवंटित नहीं करते हैं, तब तक प्रतीक्षा करें जब आप दौड़ें kubectl get svc, और उस आईपी को देखें उस पेज पर सूची)। उनमें से एक को स्थिर के रूप में चिह्नित करें , मान लें कि यह बाहरी पता है 10.10.10.10
  3. अपने LoadBalancer को loadBalancerIP=10.10.10.10ऊपर के रूप में संपादित करें (IP द्वारा अनुकूल करें जो आपको Google द्वारा दिया गया था)।

अब यदि आप अपने LoadBalancer या यहां तक ​​कि अपने नामस्थान को हटाते हैं, तो उस क्लस्टर पर पुन: पुन: पोस्ट करने पर उस आईपी पते को संरक्षित करना चाहिए। यदि आपको क्लस्टर बदलने की आवश्यकता है, तो कुछ मैनुअल फ़िडलिंग संभव होनी चाहिए:

  1. के तहत "नेटवर्क लोड संतुलन" अनुभाग में, "लक्ष्य पूल" टैब पर क्लिक करें, बटन "लक्ष्य पूल बनाएँ":
    • नाम: cluster-pool(या कोई अन्य नाम)
    • क्षेत्र: अपने किसी समूह के क्षेत्र का चयन करें
    • स्वास्थ्य जांच: वैकल्पिक, यदि आप चाहें
    • मौजूदा उदाहरण समूहों का चयन करें: आपका कुबेरनेट समूह
  2. "नेटवर्क लोड बैलेंसिंग" सेक्शन के तहत , "फॉरवर्डिंग रूल्स" टैब पर , "फॉरवर्डिंग रूल नियम" बटन पर क्लिक करें:
    • नाम: http-cross-region-gfr(या कोई अन्य नाम)
    • क्षेत्र: अपने किसी समूह के क्षेत्र का चयन करें
    • बाहरी आईपी: loadbalancer-ip-crossregionआप का चयन सिर्फ आरक्षित है
    • टारगेट पूल: cluster-poolआपने अभी बनाया चयन करें

क्या वे अभी भी प्रासंगिक हैं?
बेन

8

खुशखबरी। यह Kubernetes v1.1 में तय किया जाएगा। आप service.spec.loadBalancerIPएक आईपी के क्षेत्र को सेट कर सकते हैं जिसे आप स्वयं जानते हैं।


पिछला:

यह एक ऐसी विशेषता है जो दरारों से होकर गिरती है। यह काम करना चाहिए था (और कुछ बिंदु पर काम भी कर सकता था), लेकिन अच्छी तरह से परीक्षण नहीं किया गया था और रास्ते में टूट गया था और फिर गलती से डिजाइन किया गया (अस्थायी रूप से)।

यह 1.0 के बाद ठीक करने के लिए मेरी छोटी सूची में है।

https://github.com/GoogleCloudPlatform/kubernetes/issues/10323


यह शायद एक टिप्पणी होनी चाहिए, एक जवाब नहीं।
वार्ड - को पुनः स्थापित मोनिका

5
@Ward: "यह संभव नहीं है" से देव है एक जवाब है, IMHO, और यह इस तरह के रूप में स्वीकार किया गया था।
स्वेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.