K8s মধ্যে ট্রাফিক সঙ্গে উৎস আইপি উপর ভিত্তি করে পরিচালনার অনুরোধ

ট্রাফিক ( https://traefik.io/ ) একটি রিভার্স প্রক্সি হিসাবে ব্যাকগ্রাউন্ডে সেবা/স্থাপনার সাথে যোগাযোগ করতে।

For this I use the deployment-variant from this part of the documentation: https://docs.traefik.io/user-guide/kubernetes/#deploy-trfik-using-a-deployment-or-daemonset

এখন ক্লাস্টারের মধ্যে একাধিক অ্যাপ্লিকেশন স্থাপন করা আছে, যা সকলের কিছু এনগ্রেইন বরাদ্দ করা আছে, যা ট্রাফিক-অনুপ্রবেশ-নিয়ন্ত্রক দ্বারা পড়ানো হয়। কিছু অ্যাপ্লিকেশনগুলি অভ্যন্তরীণ বিষয়গুলি, যেমন কিবানা বা ট্রাফিক-ওয়েব-ui , এবং কিছু অন্যান্য বাহ্যিক, অ্যাপ্লিকেশনের মত নিজেদেরও। আমি বিভিন্ন ডিএনএস এন্ট্রি (যেমন <�কোড> https://dashboard.internal.mycoolapp.com এবং https://app1.external.mycoolapp.com ) দিয়ে তাদের দুটি পার্থক্য করি এবং অভ্যন্তরীণ ডিএনএস বাইরের বিশ্বের (= ইন্টারনেট) থেকে সমাধান করা হয় না তবে বহিরাগত হয় (google dns থেকে যেমন)।

সেটআপের জন্য এখন, আসুন সমস্যাটি দেখা যাক:

কয়েক দিন আগে, আমি ভাবলাম: যদি আমি একটি মেশিনে * internal.mycoolapp.com জন্য একটি ওয়াইল্ডকার্ড dns এন্ট্রি তৈরি করি, তাহলে এটি আমার নেটওয়ার্কের বাইরে যাবে এবং এটি কেবল এটির সমাধান করবে একই আইপি (গুলি) বাইরের ডিএনএস এন্ট্রি সমাধান করে। এবং ভিউলা, আমার অভ্যন্তরীণ সেবা বাইরে থেকে অ্যাক্সেসযোগ্য!

সুতরাং এই, অবশ্যই, একটি রাষ্ট্র যা গ্রহণযোগ্য নয় তাই আমি এই সমাধানের জন্য অনুসন্ধান করছি।

প্রথম অনুরোধে অভ্যন্তরীণ পরিষেবার জন্য সমস্ত আগত অনুরোধগুলি ব্লক করা হয়েছিল, যদি অনুরোধকারীর হোস্ট আইপি আমাদের নেটওয়ার্কের বাইরে থাকে:

...
kind: Ingress
metadata:
  name: app1
  namespace: default
  annotations:
    traefik.ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/8"
    ingress.kubernetes.io/whitelist-x-forwarded-for: "true"
...

তাত্ত্বিকভাবে এটি কাজ করা উচিত। কিন্তু পরে আমি খুঁজে পাই যে traefik-ingress-controller তে পৌঁছানোর আগে, সমস্ত অনুরোধগুলি kube-proxy দ্বারা পরিচালিত হয় এবং তাদের হোস্ট ঠিকানাগুলি স্থানীয় ঠিকানাগুলিতে অনুবাদ করা হয় (< em> (S) NAT ), তাই প্রতিটি অনুরোধের একটি অভ্যন্তরীণ হোস্ট ঠিকানা সেট আছে।

তাই এই বিন্দু আমি বর্তমানে একটি সমাধান খুঁজছি হয়।

এক সমাধান কল্পনানুসারে traefik-ingress-controller একটি স্থাপনা হিসাবে নয়, তবে ডিমন সেট করে সেটিকে সরাসরি হোস্টে পোর্টে সংযুক্ত করে (যেমন এখানে বলা হয়েছে https://docs.traefik.io/user-guide/ kubernetes/# প্রয়োগের-trfik-ব্যবহার-এ-স্থাপনার-অর-daemonset )। আমি গতকাল যে শুধুমাত্র একটি ডেমন সেট করতে আমার ট্রাফিক কনফিগারেশন পরিবর্তন করে এবং এটি NET_BIND_SERVICE ক্ষমতা যোগ করে, কিন্তু এটি সত্যিই সেখানে কিছু পরিবর্তন হয়নি তাই কেউ কি কোন ধারণা আছে আমি কি সেখানে ভুল কাজ করেছেন? অথবা কেউ কিভাবে একটি ভাল কিভাবে/টিউটোরিয়াল/আছে ... কিভাবে ভিজিটর নিয়ন্ত্রকের মাধ্যমে প্রকৃত অনুরোধকারী হোস্টটি পাস করতে হয়?

এখানে traefik জন্য আমার বর্তমান কনফিগারেশন ফাইল:

---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
  labels:
    k8s-app: traefik-ingress-lb
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: traefik-ingress-lb
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      serviceAccountName: traefik-ingress-controller
      terminationGracePeriodSeconds: 60
      containers:
      - image: traefik:v1.6.4
        name: traefik-ingress-lb
        volumeMounts:
        - mountPath: /ssl/external
          name: ssl-external
        - mountPath: /ssl/internal
          name: ssl-internal
        - name: traefik-toml
          subPath: traefik.toml
          mountPath: /config/traefik.toml
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443
        - name: admin
          containerPort: 8080
        args:
        - --configfile=/config/traefik.toml
        - --api
        - --kubernetes
        - --logLevel=INFO
      volumes:
      - name: ssl-external
        secret:
          secretName: external.mycoolapp.com.cert
      - name: ssl-internal
        secret:
          secretName: internal.mycoolapp.com.cert
      - name: traefik-toml
        configMap:
          name: traefik-toml
---
kind: Service
apiVersion: v1
metadata:
  name: traefik-ingress-service
  namespace: kube-system
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
  - protocol: TCP
    port: 80
    name: web
  - protocol: TCP
    port: 443
    name: sweb
  externalIPs:
  - 10.2.3.1
  - 10.2.3.2
  - 10.2.3.3

Toml- ফাইলে কেবল http-to-https পুনর্চালনা থাকে এবং শংসাপত্র ফাইলের পাথ।

আমি মনে করি কিছু অন্যান্য সমাধান আছে, কিন্তু তারা সব আছে যে নেতিবাচকতা আছে আরো জিনিষ স্থাপনার এবং বজায় রাখা, অন্য পোর্টের উপর একটি দ্বিতীয় সন্নিবেশ কন্ট্রোলার মত, যে শুধুমাত্র নির্দিষ্ট ঢোকা বস্তু, বা একটি নতুন সমগ্র ক্লাস্টারের সামনে বাহ্যিক অনুরোধের জন্য এন্ট্রিপয়েন্ট, যা হোস্ট হ্যান্ডারগুলি থেকে অনুরোধ মুছে দেয়, যখন এটি আমার বাহ্যিক ঠিকানা নয় (এটি কি এসএসএল এর সাথে কাজ করে?)।

তাই আমি সত্যিই এই কিছু সাহায্য প্রয়োজন। আগাম ধন্যবাদ!

2

কোন উত্তর নেই

0