5

मैं वर्तमान में एक सेवा है जो इस तरह दिखता है:बाहरी आईपी के साथ क्लस्टरआईपी सेवा पर आने वाले यातायात से स्रोत आईपी को कैसे संरक्षित किया जाए?

apiVersion: v1 
kind: Service 
metadata: 
    name: httpd 
spec: 
    ports: 
    - port: 80 
     targetPort: 80 
     name: http 
     protocol: TCP 
    - port: 443 
     targetPort: 443 
     name: https 
     protocol: TCP 
    selector: 
    app: httpd 
    externalIPs: 
    - 10.128.0.2 # VM's internal IP 

मैं बाहरी IP वी एम के लिए बाध्य से यातायात ठीक प्राप्त कर सकते हैं, लेकिन अनुरोधों के सभी स्रोत आईपी 10.104.0.1, साथ HTTP द्वारा प्राप्त कर रहे हैं जो सबसे निश्चित रूप से एक आंतरिक आईपी है - भले ही मैं क्लस्टर के बाहर से वीएम के बाहरी आईपी से कनेक्ट हो।

लोड बैलेंसर या प्रवेश स्थापित किए बिना अनुरोध के लिए मैं असली स्रोत आईपी कैसे प्राप्त कर सकता हूं?

+0

क्या आप जीसीई, जीकेई या कुछ और पर चल रहे हैं? –

+0

मैं जीकेई पर चल रहा हूं। – rfw

उत्तर

1

यह प्राप्त करना आसान नहीं है - क्यूब-प्रॉक्सी काम करने के तरीके के कारण, आपके ट्रैफ़िक को आपकी सेवा का समर्थन करने वाले पॉड तक पहुंचने से पहले नोड्स के बीच अग्रेषित किया जा सकता है।

कुछ बीटा एनोटेशन हैं जिनका उपयोग आप इसके आसपास पाने के लिए कर सकते हैं, विशेष रूप से service.beta.kubernetes.io/external-traffic: OnlyLocal

डॉक्स में अधिक जानकारी के लिए, यहाँ: https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typeloadbalancer

लेकिन यह एक LoadBalancer की जरूरत नहीं की अपनी अतिरिक्त आवश्यकता को पूरा नहीं करता है। क्या आप विस्तार कर सकते हैं कि आप लोडबैंसर क्यों शामिल नहीं करना चाहते हैं?

+0

मैं एक ही समस्या में चल रहा हूँ। क्लस्टरआईपी का उपयोग करके मैं लोड बैलेंसर प्रावधान के अतिरिक्त शुल्क से बच सकता हूं। (जो, मेरे मामले में, मेरे पास एक नोड की तुलना में और भी महंगा है) – willwill

1

आप केवल ठीक एक फली है, तो आप इस लक्ष्य को हासिल करने के लिए hostNetwork: true उपयोग कर सकते हैं:

apiVersion: apps/v1beta1 
kind: Deployment 
metadata: 
    name: caddy 
spec: 
    replicas: 1 
    template: 
    metadata: 
     labels: 
     app: caddy 
    spec: 
     hostNetwork: true # <--------- 
     containers: 
     - name: caddy 
     image: your_image 
     env: 
     - name: STATIC_BACKEND # example env in my custom image 
      value: $(STATIC_SERVICE_HOST):80 

ध्यान दें कि यह अपने फली करके मेजबान के DNS रिसोल्वर और नहीं Kubernetes 'प्राप्त कर लेगा। इसका मतलब है कि आप अब DNS नाम से क्लस्टर सेवाओं को हल नहीं कर सकते हैं। उदाहरण के लिए, ऊपर दिए गए उदाहरण में आप static सेवा http://static पर नहीं पहुंच सकते हैं। आप अभी भी अपने क्लस्टर आईपी द्वारा सेवाओं तक पहुंच सकते हैं, जिन्हें environment variables द्वारा इंजेक्शन दिया जाता है।

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