লোড ব্যালেন্সার ছাড়াই Google কনটেইনার ইঞ্জিনে 80 এবং 443 পোর্ট উন্মুক্ত করুন


23

বর্তমানে আমি একটি ছোট শখের প্রকল্পে কাজ করছি যা প্রস্তুত হওয়ার পরে আমি ওপেন সোর্স তৈরি করব। এই পরিষেবাটি গুগল কনটেইনার ইঞ্জিনে চলছে। আমি কনফিগারেশন ঝামেলা এড়ানোর জন্য জিসিই বেছে নিয়েছি, ব্যয় সাশ্রয়ী এবং নতুন জিনিস শিখতে।

আমার পোডগুলি ভাল চলছে এবং আমি LoadBalancer80 এবং 443 বন্দরে পরিষেবাটি প্রকাশ করার জন্য টাইপযুক্ত একটি পরিষেবা তৈরি করেছি This এটি পুরোপুরি কার্যকরভাবে কাজ করে।

তবে, আমি আবিষ্কার করেছি যে প্রতিটি LoadBalancerপরিষেবার জন্য একটি নতুন গুগল কম্পিউট ইঞ্জিন লোড ব্যালেন্সার তৈরি হয়েছে। এই লোড ব্যালেন্সারটি বেশ ব্যয়বহুল এবং সত্যই কোনও শখের প্রকল্পের জন্য একক নজরে সম্পন্ন হয়েছে।

ব্যয়গুলি হ্রাস করার জন্য আমি লোড ব্যালেন্সার ছাড়াই পোর্টগুলি প্রকাশের উপায় খুঁজছি।

আমি এখন পর্যন্ত যা চেষ্টা করেছি:

  • একটি NodePortপরিষেবা স্থাপন করুন । দুর্ভাগ্যক্রমে এটি 30000 এর নীচে একটি বন্দর উন্মুক্ত করতে অনুমোদিত নয়।

  • একটি ইঙ্গিত স্থাপন করুন তবে এটি একটি লোড ব্যালেন্সারও তৈরি করে।

  • HttpLoadBalancing( Https://cloud.google.com/container-engine/references/rest/v1/projects.zones.clusters#HttpLoadBalancing অক্ষম করার চেষ্টা করা হয়েছে ) তবে এটি এখনও একটি ভারসাম্য রোধ করে creates

লোড ব্যালেন্সার ছাড়াই গুগল কনটেইনার ইঞ্জিনে একক দৃষ্টান্তের জন্য 80 এবং 443 পোর্টটি ফাঁস করার কোনও উপায় আছে?

উত্তর:


10

হ্যাঁ, পরিষেবাতে বহিরাগতদের মাধ্যমে। উদাহরণস্বরূপ পরিষেবাটি আমি ব্যবহার করেছি:

apiVersion: v1
kind: Service
metadata:
  name: bind
  labels:
    app: bind
    version: 3.0.0
spec:
  ports:
    - port: 53
      protocol: UDP
  selector:
    app: bind
    version: 3.0.0
  externalIPs:
    - a.b.c.d
    - a.b.c.e

দয়া করে সচেতন হন কনফিগার ফাইলে তালিকাভুক্ত আইপিগুলি অবশ্যই জিসিইতে অভ্যন্তরীণ আইপি হওয়া উচিত।


ধন্যবাদ! তবে আমি মনে করি আমি কিছু মিস করেছি। পরিষেবা মোতায়েন কিন্তু ইন্টারনেট থেকে অক্ষম। আমি সঠিক ফায়ারওয়াল বিধি সেট করেছি। পরিষেবাটি সঠিকভাবে প্রদর্শিত হচ্ছেexternalIp
রুবেন আর্নস্ট

দেরিতে জবাবের জন্য দুঃখিত, ভুলে গেছি যে আমি ঠিক একই ইস্যুতে সময় ব্যয় করেছি। তালিকাভুক্ত আইপিগুলির আভ্যন্তরীণ আইপি হওয়া দরকার , বাহ্যিক নয় (কমপক্ষে জিসিইতে)।
কনারজেসি

ধন্যবাদ, সমাধান ছিল! দুর্ভাগ্যক্রমে আমাকে এখনও উঁচুতে অনুমতি দেওয়া হয়নি ... উপরের মন্তব্যটির সাথে মিলিত উত্তরটি (যা মূল ছিল) আমার সমস্যা সমাধান করেছে তা জানাতে আমি এই মন্তব্যটি বাদ দিলাম!
রুবেন আর্নস্ট

1
আপনি (বা @ রুবেনআর্নস্ট) উত্তরটি কিছুটা প্রসারিত করতে চান? বিশেষত, "জিসিইতে তালিকাভুক্ত আইপিগুলি অবশ্যই ইনট্রেনাল আইপি হওয়া উচিত।" আপনি কোন আইপি বলতে চাইছেন? আপনি কি আপনার একক নোড ক্লাস্টারে নির্ধারিত একটি স্ট্যাটিক আইপি দিয়ে এই কাজটি করতে সক্ষম?
ব্রেট

@ ব্রেট: আমার দেরিতে সাড়া পাওয়ার জন্য দুঃখিত। ইতিমধ্যে ইতিমধ্যে আপনার প্রশ্নের উত্তর দেওয়া হয়েছে?
রুবেন আর্নস্ট

4

কোনারজেসির দুর্দান্ত এবং কার্যক্ষম সমাধানের পাশাপাশি: এই প্রশ্নটিতে একই সমাধানটিও বর্ণিত হয়েছে: কুবেরনেটস - আমি ব্যয় হ্রাস করতে জিএসই লোড ব্যালান্সার ব্যবহার এড়াতে পারি?

"অভ্যন্তরীণ আইপি" গণনা উদাহরণের (ওরফে নোডের) অভ্যন্তরীণ আইপি (গুগল ক্লাউড প্ল্যাটফর্ম -> গুগল কম্পিউট ইঞ্জিন -> ভিএম উদাহরণগুলিতে দেখা যায়) বোঝায়

এই মন্তব্যটি কেন একটি অভ্যন্তরীণ এবং বহিরাগত আইপি নয় কনফিগার করা উচিত একটি ইঙ্গিত দেয়।

তদ্ব্যতীত, 80 এবং 443 বন্দরগুলির জন্য পরিষেবাটি কনফিগার করার পরে, আমার ফায়ারওয়াল বিধি তৈরি করতে হয়েছিল যাতে আমার উদাহরণ নোডে ট্রাফিকের অনুমতি দেওয়া হয়েছিল:

gcloud compute firewall-rules create your-name-for-this-fw-rule --allow tcp:80,tcp:443 --source-ranges=0.0.0.0/0

এই সেটআপের পরে, আমি আমার পরিষেবাটি http (গুলি): // বহিরাগতের মাধ্যমে অ্যাক্সেস করতে পারি


নোডের অভ্যন্তরীণ আইপি ব্যবহার করে কৌশলটি করা হয়েছিল। Aming নামকরণের সাথে এমন বিভ্রান্তি!
জেমস

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

নোট করুন যে এটি করার মাধ্যমে আপনার পোড হোস্টের ডিএনএস রেজলভারের উত্তরাধিকারী হবে এবং কুবেরনেটস নয়। তার মানে আপনি আর ডিএনএস নামে ক্লাস্টার পরিষেবাদি সমাধান করতে পারবেন না। উদাহরণস্বরূপ, উপরের উদাহরণে আপনি http: // স্থিতিতেstatic পরিষেবা অ্যাক্সেস করতে পারবেন না । আপনি এখনও তাদের ক্লাস্টার আইপি দ্বারা পরিষেবাগুলি অ্যাক্সেস করতে পারেন যা পরিবেশের ভেরিয়েবল দ্বারা ইনজেকশন করা হয়

এই সমাধানটি পরিষেবাটির বহিরাগত আইপি ব্যবহারের চেয়ে ভাল কারণ এটি কিউব-প্রক্সি বাইপাস করে এবং আপনি সঠিক উত্স আইপি পাবেন।


1

@ কননরজেসি @ ডারমাইকির উত্তরগুলি আমার পক্ষে ঠিক কী কাজ করেছে তা সংশ্লেষিত করতে:

কম্পিউট ইঞ্জিন ইনস্ট্যান্সে চলছে একটি ক্লাস্টার পুল :

gce vm name: gke-my-app-cluster-pool-blah`
internal ip: 10.123.0.1
external ip: 34.56.7.001 # will be publically exposed

আমি পরিষেবাটি করেছি:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-app
  name: my-app-service
spec:
  clusterIP: 10.22.222.222
  externalIPs:
  - 10.123.0.1 # the instance internal ip
  ports:
  - port: 80
    protocol: TCP
  selector:
    app: my-app
  type: ClusterIP

এবং তারপরে প্রকল্পের সকল (?) আইপিএসের জন্য ফায়ারওয়ালটি খুললেন:

gcloud compute firewall-rules create open-my-app --allow tcp:80,tcp:443 --source-ranges=0.0.0.0/0

এবং তারপরে জিসিই ইনস্ট্যান্স পাবলিক আইপি (ক্লাস্টার আইপি নয়) এর my-appমাধ্যমে অ্যাক্সেসযোগ্য ছিল34.56.7.001


0

ব্যয় এবং বিক্রেতার লক-ইন করার কারণে আমি প্রয়োজনীয় না হওয়া পর্যন্ত ক্লাউড লোড ব্যালান্সার ব্যবহার না করা পছন্দ করি।

পরিবর্তে আমি এটি ব্যবহার করি: https://kubernetes.github.io/ingress-nginx/deploy/

এটি এমন একটি শুঁটি যা আপনার জন্য একটি ভার ভারসাম্য চালায়। এই পৃষ্ঠায় GKE নির্দিষ্ট ইনস্টলেশন নোট রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.