kubernetes পরিষেবা বহিরাগত আইপি মুলতুবি আছে


142

আমি কুবারনেটে এনগিনেক্স মোতায়েন করার চেষ্টা করছি, কুবেরনেটস সংস্করণটি v1.5.2, আমি 3 রেপ্লিকা সহ এনগিনেক্স স্থাপন করেছি, ওয়াইএএমএল ফাইলটি নীচে রয়েছে,

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: deployment-example
spec:
  replicas: 3
  revisionHistoryLimit: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.10
        ports:
        - containerPort: 80

এবং এখন আমি তার পোর্ট 80 নোডের 30062 বন্দরে প্রকাশ করতে চাই, তার জন্য আমি নীচে একটি পরিষেবা তৈরি করেছি,

kind: Service
apiVersion: v1
metadata:
  name: nginx-ils-service
spec:
  ports:
    - name: http
      port: 80
      nodePort: 30062
  selector:
    app: nginx
  type: LoadBalancer

এই পরিষেবাটি যেমনটি হওয়া উচিত ঠিক তেমন কাজ করছে তবে এটি কেবল কুবারনেটস ড্যাশবোর্ডেও টার্মিনালে মুলতুবি হিসাবে দেখানো হচ্ছে। টার্মিনাল আউটপুটড্যাশ বোর্ডের স্থিতি

সুতরাং দয়া করে এই সমস্যাটি সমাধান করতে আমাকে সহায়তা করুন। ধন্যবাদ ...

উত্তর:


177

দেখে মনে হচ্ছে আপনি একটি কাস্টম Kubernetes ক্লাস্টার ব্যবহার করছেন (ব্যবহার minikube, kubeadmবা করা)। এই ক্ষেত্রে, কোনও লোডবালেন্সার সংহত নেই (এডাব্লুএস বা গুগল ক্লাউডের বিপরীতে)। এই ডিফল্ট সেটআপের সাহায্যে আপনি কেবল ব্যবহার করতে পারেন NodePortবা একটি ইনগ্রেশ কন্ট্রোলার।

সঙ্গে প্রবেশ কন্ট্রোলার আপনি একটি ডোমেন নাম যা আপনার শুঁটি মানচিত্র সেটআপ করতে পারেন; আপনি LoadBalancerযদি কোনও ইন্ট্র্রেস কন্ট্রোলার ব্যবহার করেন তবে আপনার পরিষেবাটিকে টাইপ দেওয়ার দরকার নেই ।


আপনাকে অনেক ধন্যবাদ @ জাভিয়ার এটি সত্যই সহায়ক। আমি উপরের ডক থেকে আমার সমস্যার সমাধান করেছি।
পঙ্কজ জ্যাকসন

9
এটি কি সত্যই উত্তর দেয় না? ব্যবহারকারী LoadBalancerএকটি পরিষেবা প্রকার হিসাবে ব্যবহার করছেন যা একটি বৈধ পরিষেবা প্রকার। NodePortএবং ingressএটি করার অন্যান্য উপায়গুলি কিন্তু সমস্যাটি সত্যিই সমাধান করা হচ্ছে না, তাই না?
র‌্যাপটার

2
এটি একটি বৈধ পরিষেবার ধরণ তবে এটি একটি অ-সামঞ্জস্যপূর্ণ প্ল্যাটফর্মে ব্যবহৃত হচ্ছে (কমপক্ষে ডিফল্টরূপে)। লোডবালেন্সার ব্যবহার করার জন্য আপনার অবশ্যই একটি প্ল্যাটফর্ম থাকতে হবে যা পোঁদের বাহ্যিক আইপি সরবরাহ করতে পারে যা গুগল ক্লাউড বা এডাব্লুএস এর মতো কিছু।
জাভিয়ের সালমারন

2
আমি অ্যাডব্লিউএসে কুবেডম ব্যবহার করছি। আমি কি এখনও পারি LoadBalancer?
jiashenC

3
আপনি যদি মিনিক्यूबটি ব্যবহার করেন তবে রান করুন "মিনিক्यूब সুড়ঙ্গ"। এখন আপনার পরিষেবাগুলি পরীক্ষা করুন আপনি পাবলিক আইপি পাবেন। আরও তথ্যের জন্য এখানে ডকটি আছে minikube.sigs.k8s.io/docs/tasks/loadbalancer
রবি

73

আপনি যদি মিনিকুব ব্যবহার করেন তবে একটি ম্যাজিক কমান্ড রয়েছে!

$ minikube tunnel

আশা করি এটির সাহায্যে কেউ কয়েক মিনিট সাশ্রয় করতে পারে।

রেফারেন্স লিংক https://minikube.sigs.k8s.io/docs/handbook/accessing/# using-minikube- unenel


আমি চেষ্টা করেছি minikube tunnelএবং এটি আসলে pendingসমস্যাটি সমাধান করে , তবে নতুন বাহ্যিক আইপি কাজ করে না: আমি একটি সময়সীমা ত্রুটি
পেয়েছি

@ a.barbieri নিশ্চিত করুন যে আপনি মিনিক्यूब আইপের পরিবর্তে টানেল আইপি ব্যবহার করছেন। "আইপি 10.106.102.98 এর সাথে ইনগ্রিং-এনগিনেক্স প্যাচিং"
পিটার ঝো

2
হ্যাঁ আপনাকে ধন্যবাদ পিটার। চেস্টা করবো. যাইহোক ডকার ডেস্কটপে স্যুইচিং আমি আউট অফ দ্য বক্স-এর সেটিংসের সাহায্যে এই সমস্যাটি কাটিয়ে উঠতে সক্ষম হয়েছি যা লোকালহোস্টে সরাসরি কাজ করে।
a.barbieri

3
প্রদর্শনের জন্য সময় সাশ্রয় করার দুর্দান্ত টিপ!
jgitter

49

আপনি যদি জিসিই বা ইকেএস ব্যবহার না করে থাকেন (তবে আপনি ব্যবহার করেছেন kubeadm) আপনি externalIPsআপনার পরিষেবা ওয়াইএএমএলে একটি বিশেষ যোগ করতে পারেন । আপনি আপনার নোডের প্রাথমিক ইন্টারফেসের সাথে সম্পর্কিত আইপি ব্যবহার করতে পারেন eth0। তারপরে আপনি নোডের বাহ্যিক আইপি ব্যবহার করে বাহ্যিকভাবে পরিষেবাটি অ্যাক্সেস করতে পারবেন।

...
spec:
  type: LoadBalancer
  externalIPs:
  - 192.168.0.10

2
এখানে একটি অনুপস্থিত তথ্য থাকতে হবে: "বাহ্যিকআইপিগুলি কুবারনেটস দ্বারা পরিচালিত হয় না এবং এটি ক্লাস্টারের প্রশাসকের দায়িত্ব।" ( kubernetes.io/docs/concepts/services- নেটওয়র্ক / সার্ভিস )। আমাকে কি কোনও ধরণের "নিয়ামক" ইনস্টল করতে হবে?
ড্যানিয়েল অল্ডার

আমি Kubernetes টিউটোরিয়াল (অনুসরণ করছি kubernetes.io/docs/tutorials/stateless-application/guestbook ) এবং kubeadm সাথে জরিমানা কাজ
এদুয়ার্দো

আপনাকে ধন্যবাদ - উজ্জ্বল, প্রত্যাশার মতো কাজ করেছেন। আমি নোডস ইথ নেটওয়ার্ক আইপি তে পরিষেবা উন্মুক্ত করেছি যা এখন ক্লাস্টারের বাইরে অ্যাক্সেসযোগ্য
ভ্লাদ গুলিন

34

একটি পরিষেবা অ্যাক্সেস করতে minikube, আপনাকে নিম্নলিখিত কমান্ডটি চালনা করতে হবে:

minikube service [-n NAMESPACE] [--url] NAME

এখানে আরও তথ্য: মিনিক्यूब গিটহাব


9
কংক্রিট উদাহরণ: মিনিক्यूब পরিষেবা স্পার্ক-ইউআই-প্রক্সি
ইউআরএল

21

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

$ kubectl get svc -n argocd argocd-server
NAME            TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
argocd-server   LoadBalancer   10.107.37.153   <pending>     80:30047/TCP,443:31307/TCP   110s

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

kubectl patch svc <svc-name> -n <namespace> -p '{"spec": {"type": "LoadBalancer", "externalIPs":["172.31.71.218"]}}'

এর পরে, এটি পাবলিক আইপিতে পরিষেবা দেওয়া শুরু করে

$ kubectl get svc argo-ui -n argo
NAME      TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
argo-ui   LoadBalancer   10.103.219.8   172.31.71.218   80:30981/TCP   7m50s

11
সম্ভবত আপনার উল্লেখ করা উচিত "172.31.71.218" কোথা থেকে এসেছে?
EuRBamarth

পরিশেষে একটি উত্তর যা প্যাচ দেয় তা দেয়। ভাগ করে নেওয়ার জন্য ধন্যবাদ.
শ্রীকান্ত

5

যদি মিনিক्यूबে চলমান থাকে, আপনি যদি ডিফল্ট ব্যবহার না করেন তবে নামের স্থানটি উল্লেখ করতে ভুলবেন না forget

মিনিক्यूब পরিষেবা << পরিষেবা_নাম >> --url --namespace = << নেমস্পেস_নাম >>


4

আপনি যদি মিনিক्यूब ব্যবহার করছেন তবে টার্মিনাল থেকে নীচে কমান্ডগুলি চালান,

$ minikube ip
$ 172.17.0.2 // then 
$ curl http://172.17.0.2:31245
or simply
$ curl http://$(minikube ip):31245

2

একই সমস্যা:

OS> কুবেটেল এসভিসি রাইট-সাবার্টুথ-ওয়ার্ডপ্রেস পান

নাম টাইপ ক্লাস্টার-আইপি এক্সটার্নাল-আইপি পোর্ট (এস)
রাইট- সাবারটুথ -ওয়ার্ডপ্রেস লোডবালেন্সার 10.97.130.7 "মুলতুবি" 80: 30454 / টিসিপি, 443: 30427 / টিসিপি

OS> মিনিক्यूब পরিষেবা তালিকা

| ------------- | ---------------------------- | ------ -------------------------- |

| নামস্পেস | নাম | ইউআরএল |

| ------------- | ---------------------------- | ------ -------------------------- |

| ডিফল্ট | kubernetes | নোড বন্দর নেই |

| ডিফল্ট | ডান- sabertooth-mariadb | নোড বন্দর নেই |

| ডিফল্ট | ডান-sabertooth-ওয়ার্ডপ্রেস | http://192.168.99.100:30454 |

| | | http://192.168.99.100:30427 |

| কিউব-সিস্টেম | kube-dns | নোড বন্দর নেই |

| কিউব-সিস্টেম | tiller-deploy | নোড বন্দর নেই |

| ------------- | ---------------------------- | ------ -------------------------- |

তবে এটি http://192.168.99.100:30454 এর মাধ্যমে অ্যাক্সেসযোগ্য


2

@ জাভিয়ের এর উত্তর অনুসরণ করা আমি আমার লোড ব্যালেন্সারের জন্য "বাহ্যিক আইপি প্যাচিং" নিয়ে যাব বলে সিদ্ধান্ত নিয়েছি।

 $ kubectl patch service my-loadbalancer-service-name \
-n lb-service-namespace \
-p '{"spec": {"type": "LoadBalancer", "externalIPs":["192.168.39.25"]}}'

এটি সেই 'বিচারাধীন' প্রতিস্থাপন করবে একটি নতুন প্যাচড আপ আইপি ঠিকানা যা আপনি আপনার ক্লাস্টারের জন্য ব্যবহার করতে পারেন।

এই সম্পর্কে আরও জন্য। দয়া করে দেখুন কার্তিক এর পোস্ট Kubernetes জন্য Minikube সঙ্গে LoadBalancer সমর্থন

এটি করার সবচেয়ে পরিষ্কার উপায় নয়। আমার একটি অস্থায়ী সমাধান প্রয়োজন। আশা করি এটি কারও সাহায্য করবে।


1

নোডপোর্ট ব্যবহার করুন:

কুবেটেল ইউজার-লগইন চালান --replicas = 2 - লেবেল = "চালানো = ব্যবহারকারী-লগইন" - আইমেজ = কিংসলেয়ার / টেম্প্রোজেক্ট: সংস্করণ 2 --port = 5000

kubectl এক্সপোজ মোতায়েন ব্যবহারকারী-লগইন - টাইপ = নোডপোর্ট - নাম = ব্যবহারকারী-লগইন-পরিষেবা

কুবেটেল পরিষেবা-ব্যবহারকারী-লগইন-পরিষেবা বর্ণনা করে (পোর্টটি নীচে নোট করুন)

কুবেক্ট ক্লাস্টার-ইনফরমেশন (আইপি-> আইপি পান যেখানে মাস্টার চলছে)

আপনার পরিষেবা (আইপি) :( পোর্ট) এ অ্যাক্সেসযোগ্য


1

মিনিক्यूब ব্যবহার করার সময়, আপনি আইপি এবং পোর্ট পেতে পারেন যার মাধ্যমে আপনি মিনিক्यूब পরিষেবা কুবিয়া-http চালিয়ে পরিষেবাটি অ্যাক্সেস করতে পারবেন।


1

আপনি যদি কোনও সমর্থিত মেঘের উপর না থাকেন তবে (আওসুর, অ্যাজুরি, গ্লকউড ইত্যাদি)) আপনি ধাতব এলবি https://metallb.universe.tf/ ছাড়া লোডবালেন্সার ব্যবহার করতে পারবেন না তবে এটি এখনও বিটাতে রয়েছে ..


1

গুগল ক্লাউড প্ল্যাটফর্ম এবং এডাব্লুএস-এর ক্ষেত্রে যেমন অন্তর্নিহিত অবকাঠামো লোড ব্যালান্সারগুলির স্বয়ংক্রিয় তৈরির সমর্থন করে এবং কুবারনেটসে সম্পর্কিত সমর্থন পেয়ে থাকে তবেই লোডবালেন্সার পরিষেবা টাইপ কাজ করবে। যদি এ জাতীয় কোনও বৈশিষ্ট্য কনফিগার করা না থাকে তবে লোডবালেন্সার আইপি ঠিকানা ক্ষেত্রটি জনবহুল এবং এখনও মুলতুবি অবস্থায় নেই এবং পরিষেবাটি নোডপোর্ট টাইপ পরিষেবার মতো একইভাবে কাজ করবে


1

আপনি নোডের আইপিটি প্যাচ করতে পারেন যেখানে পোড হোস্ট করা হয় (নোডের ব্যক্তিগত আইপি), এটি সহজ কাজ।

উপরোক্ত পোস্টগুলির সাথে রেফারেন্স গ্রহণ করা, নিম্নলিখিতগুলি আমার পক্ষে কাজ করেছে:

কুবেটেল প্যাচ পরিষেবা আমার-লোডবালেন্সার-পরিষেবা-নাম \ -n lb-service-namespace p -p 'spec "spec": {"প্রকার": "লোডবালেন্সার", "বহিরাগতগুলি": ["xxx.xxx.xxx.xxx প্রাইভেট শারীরিক সার্ভারের আইপি - নোড - যেখানে স্থাপনা সম্পন্ন হয় "]}} '


0

বিদ্যমান পরিষেবাটি মুছুন এবং একই নতুন পরিষেবা তৈরি করুন আমার সমস্যার সমাধান করুন। আমার সমস্যাগুলি হ'ল Ip I সংজ্ঞায়িত লোডিং ব্যালেন্সিংটি ব্যবহার করা হয় যাতে বাহ্যিক শেষের অবস্থানটি মুলতুবি থাকে। আমি যখন একটি নতুন লোড ব্যালেন্সিং আইপি পরিবর্তন করেছি তখন এটি কাজ করে না। অবশেষে, বিদ্যমান পরিষেবাটি মুছুন এবং একটি নতুন তৈরি করুন যা আমার সমস্যার সমাধান করে।


0

কিউব-নিয়ামক লগগুলি পরীক্ষা করুন। ক্লাস্টারআইডি ট্যাগগুলি ই সি 2 উদাহরণে সেট করে আমি এই সমস্যাটি সমাধান করতে সক্ষম হয়েছি I


0

এটি যদি আপনার ব্যক্তিগত কে 8 এস ক্লাস্টার হয় তবে মেটালএলবি আরও ভাল ফিট হবে। নীচে পদক্ষেপ দেওয়া হল।

পদক্ষেপ 1: আপনার ক্লাস্টারে মেটালএলবি ইনস্টল করুন

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml
# On first install only
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"

পদক্ষেপ 2: একটি কনফিগারেশন ব্যবহার করে এটি কনফিগার করুন

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 172.42.42.100-172.42.42.105 #Update this with your Nodes IP range 

পদক্ষেপ 3: একটি বাহ্যিক আইপি পেতে আপনার পরিষেবা তৈরি করুন (যদিও এটি একটি ব্যক্তিগত আইপি হবে) be

FYR:

মেটালএলবি স্থাপনের আগে: এখানে চিত্র বর্ণনা লিখুন

মেটালএলবি ইনস্টলেশনের পরে: এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন


0

যারা চলার সময় এই ত্রুটির মুখোমুখি হয়েছিল তাদের জন্য একটি সমাধান যুক্ত করা হচ্ছে

সবার আগে রান:

kubectl describe svc <service-name>

এবং তারপরে eventsনীচের উদাহরণের আউটপুটটিতে ক্ষেত্রটি পর্যালোচনা করুন :

Name:                     some-service
Namespace:                default
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"some-service","namespace":"default"},"spec":{"ports":[{"port":80,...
Selector:                 app=some
Type:                     LoadBalancer
IP:                       10.100.91.19
Port:                     <unset>  80/TCP
TargetPort:               5000/TCP
NodePort:                 <unset>  31022/TCP
Endpoints:                <none>
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type     Reason                  Age        From                Message
  ----     ------                  ----       ----                -------
  Normal   EnsuringLoadBalancer    68s  service-controller  Ensuring load balancer
  Warning  SyncLoadBalancerFailed  67s  service-controller  Error syncing load balancer: failed to ensure load balancer: could not find any suitable subnets for creating the ELB

ত্রুটি বার্তাটি পর্যালোচনা করুন:

Failed to ensure load balancer: could not find any suitable subnets for creating the ELB

আমার ক্ষেত্রে, ইএলবি তৈরির জন্য উপযুক্ত সাবনেট সরবরাহ না করার কারণ হ'ল:

1: ইকেএস ক্লাস্টারটি জনগণের মুখোমুখি না করে ভুল সাবনেট গ্রুপ - অভ্যন্তরীণ সাবনেটগুলিতে স্থাপন করা হয়েছিল।
(*) ডিফল্টরূপে, প্রকারের পরিষেবাগুলি LoadBalancerকোনও service.beta.kubernetes.io/aws-load-balancer-internal: "true"টিকা দেওয়া না থাকলে জনসমক্ষে লোড ব্যালান্সার তৈরি করে ।

2: সাবনেটগুলি এখানে বর্ণিত প্রয়োজনীয়তা অনুসারে ট্যাগ করা হয়নি ।

এর সাথে ভিপিসি ট্যাগ করা:

Key: kubernetes.io/cluster/yourEKSClusterName
Value: shared

এর সাথে সর্বজনীন সাবনেটগুলি ট্যাগ করা:

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