5

पृष्ठभूमि का एक छोटा सा हिस्सा: मेरे पास एक गो सेवा है जो क्लाइंट ऐप्स के साथ संवाद करने के लिए जीआरपीसी का उपयोग करती है। जीआरपीसी HTTP2 का उपयोग करता है, इसलिए मैं Google ऐप इंजन या Google क्लाउड HTTP लोड बैलेंसर का उपयोग नहीं कर सकता। मुझे अपने गो एप्लिकेशन में इंटरनेट से कच्चे टीसीपी भार संतुलन की आवश्यकता है।आप Google कंटेनर इंजन (जीकेई) सेवा के लिए एक स्थिर आईपी पता कैसे सेट करते हैं?

मैं जीकेई ट्यूटोरियल के माध्यम से गया और विभिन्न दस्तावेज़ों को पढ़ा और मुझे अपना आवेदन एक स्थिर आईपी पता देने का कोई तरीका नहीं मिला। तो आप जीकेई में चल रहे किसी चीज़ से जुड़ा एक स्थिर आईपी कैसे प्राप्त करते हैं?

उत्तर

3

मुझे अंत में यह पता चला। ऐसा करने के लिए, आप जीकेई से आपके लिए बाहरी लोड बैलेंसर सेट अप करने के लिए कहते हैं, फिर आप चुनिंदा रूप से स्टैक के टुकड़ों को प्रतिस्थापित करते हैं। अच्छी खबर यह है कि जिस तरह से आप HTTP स्वास्थ्य जांच भी स्थापित कर सकते हैं, जो जीकेई डिफ़ॉल्ट रूप से नहीं करता है।

सुनिश्चित करें कि आपके पास Google क्लाउड प्लेटफ़ॉर्म से एक स्थिर आईपी उपलब्ध है। आप कंसोल में अनुरोध कर सकते हैं।

आपकी सेवा ऊपर और की तरह कुछ के साथ हमेशा तैयार:

kubectl expose rc api-server --name=api-server --port=8080,8081 --create-external-load-balancer=true 

(मैं HTTP स्वास्थ्य जाँच और 8081 के लिए पोर्ट 8080 का उपयोग कर रहा gRPC अनुरोध का उत्तर देने के लिए)।

--create-external-load-balancer=true एक प्रवेश नियम के साथ कुबेरनेट सेवाओं को अद्यतन करता है, एक लक्षित पूल सेट करता है, नेटवर्क लोड बैलेंसर सेट करता है और फ़ायरवॉल नियम जोड़ता है। हमें # 1 और # 3 को ठीक करना होगा।

चित्रित करें कि सब कुछ पहले से चल रहा है।

export TARGET_POOL_NAME=$(gcloud compute target-pools list | head -n 2 | tail -n 1 | cut -d " " -f 1) 

export EXTERNAL_IP=$(gcloud compute addresses list | head -n 2 | tail -n 1 | cut -d " " -f 3) 

लक्ष्य पूल के लिए स्वास्थ्य जांच संलग्न

gcloud compute http-health-checks create api-server-http-basic-check --port 8080 --request-path "/_health" 

gcloud compute target-pools add-health-checks ${TARGET_POOL_NAME} --http-health-check api-server-http-basic-check 

एक नया अग्रेषण नियम GKE

द्वारा
gcloud compute forwarding-rules create api-server \ 
--region us-central1 --port-range 8080-8081 \ 
--address ${EXTERNAL_IP} --target-pool ${TARGET_POOL_NAME} 

मूल GKE अग्रेषण नियम हटाएं उत्पन्न एक को बदलने के लिए बनाएं

gcloud compute forwarding-rules delete $(gcloud compute forwarding-rules list | head -n 2 | tail -n 1 | cut -d " " -f 1) 

नए आईपी से प्रवेश करने की अनुमति देने के लिए कुबेरनेट सेवा अपडेट करें:

kubectl patch services api-server -p "{\"status\":{\"loadBalancer\":{\"ingress\": [{\"ip\": \"${EXTERNAL_IP}\"} ]}}}" 

ऐसा करना चाहिए!

कॉपी पेस्टिंग से सावधान रहें, मेरे सिर और पूंछ मेरे लिए काम करते हैं क्योंकि मेरे पास केवल एक ऐप चल रहा है, लेकिन आप चीजों को एक अलग क्रम में देख सकते हैं।

+0

जैच - मुझे खुशी है कि आप इसे समझने में सक्षम थे। जब आप जीकेई में कोई सेवा बनाते हैं, तो आप अनुरोध कर सकते हैं कि इसे किसी विशिष्ट आईपी पते पर असाइन किया जाए। तो यदि आप एक स्थिर आईपी बनाते हैं, तो आपको अपनी सेवा में असाइन करने में सक्षम होना चाहिए। –

+0

प्रतिक्रिया @RobertBailey के लिए धन्यवाद! मैं देखता हूं कि कमांड लाइन फ्लैग के रूप में kubctl का पर्दाफाश करें। यदि मैं 'kubectl create' का उपयोग कर रहा हूं, तो मैं अपने * _controller.json में सार्वजनिक-आईपी कहां डालूं? मुझे लगता है कि मुझे अभी भी http स्वास्थ्य जांच संलग्न करने की आवश्यकता है, इसलिए यह पता लगाया गया कि यह कैसे स्थापित किया गया था वास्तव में जानकारीपूर्ण हो गया। –

+0

मुझे लगता है कि बहिष्कृत PublicIPs वह फ़ील्ड है जिसे आप चाहते हैं (https://github.com/kubernetes/kubernetes/blob/master/pkg/api/v1/types.go#L1534-L1539) लेकिन यह ऊपर नया बाह्य आईपीआईपी क्षेत्र हो सकता है यह। और यह आपके * _service.json फ़ाइल में जाता है, प्रतिकृति नियंत्रक कॉन्फ़िगरेशन नहीं। –

4

यह कुबर्नेट्स v1.0.x में समर्थित नहीं है लेकिन v1.1.x में यह service.spec.loadBalancerIP के रूप में उपलब्ध होगा। जब तक आप वास्तव में उस आईपी के मालिक हैं, हम इसका उपयोग करेंगे।

+0

मैं अपने जीकेई (v1.1.1) सेवा पर 'loadBalancerIP' का उपयोग करने की कोशिश कर रहा हूं। क्लाउड कंसोल में एक स्थिर आईपी पता बनाया और इसे सेवा परिभाषा में जोड़ा। फिर भी, सेवा को एक अलग आईपी पता मिलता है और स्थैतिक आईपी असाइन नहीं किया जाता है - क्या मैं कुछ गलत कर रहा हूं? –

+1

कृपया अपना वाईएएमएल या जेएसओएन पोस्ट करें, कृपया? कृपया 'kubectl सेवा -o yaml' चलाएं ताकि हम देख सकें कि सर्वर क्या सोचता है। –

+0

जंगली अनुमान: मुझे संदेह है कि आपके पास पुरानी कुबेक्टल कमांडलाइन है (मुझे लगता है कि gcloud बंडल संस्करण एक नए gcloud पुश के लिए इंतजार कर रहा है) –

संबंधित मुद्दे