8

लौटने रखता है।Kubernetes प्रवेश (GCE) मैं सेटअप करने के लिए GCE Kubernetes में एक प्रवेश कोशिश कर रहा हूँ 502 त्रुटि

Ingress 502 error


यहाँ जब मैं चलाने मैं क्या मिलता है: लेकिन जब मैं प्रवेश में परिभाषित आईपी पते और पथ संयोजन पर जाते हैं, मैं निम्नलिखित 502 त्रुटि प्राप्त हो रही kubectl describe ing --namespace dpl-staging

Name:   dpl-identity 
Namespace:  dpl-staging 
Address:  35.186.221.153 
Default backend: default-http-backend:80 (10.0.8.5:8080) 
TLS: 
    dpl-identity terminates 
Rules: 
    Host Path Backends 
    ---- ---- -------- 
    * 
     /api/identity/*  dpl-identity:4000 (<none>) 
Annotations: 
    https-forwarding-rule: k8s-fws-dpl-staging-dpl-identity--5fc40252fadea594 
    https-target-proxy:  k8s-tps-dpl-staging-dpl-identity--5fc40252fadea594 
    url-map:   k8s-um-dpl-staging-dpl-identity--5fc40252fadea594 
    backends:   {"k8s-be-31962--5fc40252fadea594":"HEALTHY","k8s-be-32396--5fc40252fadea594":"UNHEALTHY"} 
Events: 
    FirstSeen LastSeen Count From    SubObjectPath Type  Reason Message 
    --------- -------- ----- ----    ------------- -------- ------ ------- 
    15m  15m  1 {loadbalancer-controller }   Normal  ADD dpl-staging/dpl-identity 
    15m  15m  1 {loadbalancer-controller }   Normal  CREATE ip: 35.186.221.153 
    15m  6m  4 {loadbalancer-controller }   Normal  Service no user specified default backend, using system default 

मुझे लगता है कि समस्या dpl-identity:4000 (<none>) है। क्या मुझे के बजाय dpl-identity सेवा का आईपी पता नहीं दिखाना चाहिए?

यहाँ मेरी सेवा वर्णन है:

apiVersion: v1 
kind: Secret 
metadata: 
    namespace: dpl-staging 
    name: dpl-identity 
type: Opaque 
data: 
    tls.key: <base64 key> 
    tls.crt: <base64 crt> 
--- 
apiVersion: v1 
kind: Service 
metadata: 
    namespace: dpl-staging 
    name: dpl-identity 
    labels: 
    app: dpl-identity 
spec: 
    type: NodePort 
    ports: 
    - port: 4000 
     targetPort: 8000 
     protocol: TCP 
     name: http 
    selector: 
    app: dpl-identity 
--- 
apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    namespace: dpl-staging 
    name: dpl-identity 
    labels: 
    app: dpl-identity 
    annotations: 
    kubernetes.io/ingress.allow-http: "false" 
spec: 
    tls: 
    - secretName: dpl-identity 
    rules: 
    - http: 
     paths: 
     - path: /api/identity/* 
      backend: 
      serviceName: dpl-identity 
      servicePort: 4000 
--- 
apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    namespace: dpl-staging 
    name: dpl-identity 
kind: Ingress 
metadata: 
    namespace: dpl-staging 
    name: dpl-identity 
    labels: 
    app: dpl-identity 
    annotations: 
    kubernetes.io/ingress.allow-http: "false" 
spec: 
    tls: 
    - secretName: dpl-identity 
    rules: 
    - http: 
     paths: 
     - path: /api/identity/* 
      backend: 
      serviceName: dpl-identity 
      servicePort: 4000 
--- 
apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    namespace: dpl-staging 
    name: dpl-identity 
    labels: 
    app: dpl-identity 
spec: 
    replicas: 2 
    strategy: 
    type: RollingUpdate 
    template: 
    metadata: 
     labels: 
     app: dpl-identity 
    spec: 
     containers: 
     - image: gcr.io/munpat-container-engine/dpl/identity:0.4.9 
     name: dpl-identity 
     ports: 
     - containerPort: 8000 
      name: http 
     volumeMounts: 
     - name: dpl-identity 
      mountPath: /data 
     volumes: 
     - name: dpl-identity 
     secret: 
      secretName: dpl-identity 
: kubectl describe ep -n dpl-staging dpl-identity

Name:  dpl-identity 
Namespace: dpl-staging 
Labels:  app=dpl-identity 
Subsets: 
    Addresses:  10.0.2.29,10.0.2.30 
    NotReadyAddresses: <none> 
    Ports: 
    Name Port Protocol 
    ---- ---- -------- 
    http 8000 TCP 

No events. 

यहाँ मेरी deployment.yaml है: kubectl describe svc --namespace dpl-staging

Name:   dpl-identity 
Namespace:  dpl-staging 
Labels:   app=dpl-identity 
Selector:  app=dpl-identity 
Type:   NodePort 
IP:    10.3.254.194 
Port:   http 4000/TCP 
NodePort:  http 32396/TCP 
Endpoints:  10.0.2.29:8000,10.0.2.30:8000 
Session Affinity: None 
No events. 

इसके अलावा, यहां क्रियान्वित करने का परिणाम है

+0

आप पर अमल किया जा सका 'kubectl ईपी -n डीपीएल-मचान डीपीएल-identity' वर्णन करता है? –

+0

@JanosLenart: मैंने अनुरोधित जानकारी के साथ अपना जवाब अपडेट कर दिया है। सहायता के लिए बहुत - बहुत धन्यवाद। – Moon

उत्तर

14

आपका बैकएंड k8s-be-32396--5fc40252fadea594"UNHEALTHY" के रूप में दिखा रहा है।

प्रवेश नहीं आगे यातायात यदि बैकएंड अस्वस्थ है, यह 502 त्रुटि आप देख रहे हैं का परिणाम देगा होगा।

इसे संयुक्त रूप से चिह्नित किया जाएगा क्योंकि यह स्वास्थ्य जांच नहीं दे रहा है, आप के 8 एस-बी -32396--5fc40252fadea594 के लिए स्वास्थ्य जांच सेटिंग देख सकते हैं यह देखने के लिए कि क्या वे आपके फली के लिए उपयुक्त हैं, यह मतदान हो सकता है एक यूआरआई या बंदरगाह जो 200 प्रतिक्रिया वापस नहीं कर रहा है। आप इन सेटिंग को कंप्यूट इंजन> हेल्थ चेक के तहत पा सकते हैं।

वे सही हैं, तो फिर वहाँ आपके ब्राउज़र और कंटेनर के बीच कई कदम है कि यातायात को गलत तरीके से गुजर रहा हो सकता है आप kubectl exec -it PODID -- bash (या राख अगर आप अल्पाइन उपयोग कर रहे हैं) की कोशिश कर सकते हैं और फिर कर्ल-इंग स्थानीय होस्ट करता है, तो देखने की कोशिश कर रहे हैं, कंटेनर की उम्मीद के रूप में जवाब है, अगर यह होता है और स्वास्थ्य की जांच भी सही ढंग से कॉन्फ़िगर तो इस समस्या के होने की संभावना अपने सेवा के साथ होने के लिए को कम होता है, आप तो एक NodePort प्रकार से एक LoadBalancer करने के लिए सेवा को बदलने की कोशिश कर सकते हैं और अगर देखना मार सीधे अपने ब्राउज़र कार्यों से सेवा आईपी।

+1

इस उत्तर के लिए बहुत बहुत धन्यवाद - मुझे एक ही समस्या थी, और आपके द्वारा दी गई जानकारी के साथ यह निर्धारित करने में सक्षम था कि 'तैयारीप्रोब' को फली के लिए कॉन्फ़िगर नहीं किया गया था, इसलिए इसे UNHEALTHY के रूप में चिह्नित किया गया था – GrandVizier

0

जारी करना वास्तव में एक स्वास्थ्य जांच है और मेरी क्षुधा जहाँ मैं नाम आधारित आभासी मेजबान इस्तेमाल किया दो अलग-अलग बैकएंड सेवाओं के लिए डोमेन के माध्यम से प्रवेश से प्रॉक्सी अनुरोध को उल्टा करने के लिए "यादृच्छिक" लग रहा था। दोनों को Lets Encrypt और kube-lego का उपयोग करके सुरक्षित किया गया था। मेरे समाधान एक प्रवेश साझा करने वाले सभी सेवाओं के लिए स्वास्थ्य की जांच के लिए पथ का मानकीकरण, और मेरे deployment.yml फ़ाइल में readinessProbe और livenessProbe कॉन्फ़िगरेशन घोषित करने के लिए किया गया था।

मैं गूगल बादल क्लस्टर नोड संस्करण 1.7.8 के साथ इस मुद्दे का सामना करना पड़ा और इस मुद्दे कि निकट मची मैं क्या अनुभव मिला: * https://github.com/jetstack/kube-lego/issues/27

मैं gce और kube-lego और मेरे बैकएंड सेवा स्वास्थ्य की जांच / पर थे उपयोग कर रहा हूँ और kube-lego/healthz पर है।यह gce ingress के साथ स्वास्थ्य जांच के लिए अलग-अलग पथ दिखाई दे सकता है, इसलिए /healthz पैटर्न से मेल खाने के लिए बैकएंड सेवाओं को अपडेट करने के लायक हो सकते हैं, इसलिए सभी का उपयोग समान है (या गीथूब मुद्दे में एक टिप्पणीकर्ता ने कहा है कि उन्होंने / पर पास करने के लिए कुबे-लेगो अपडेट किया है)।

0

मुझे एक ही समस्या थी, और livenessProbe के साथ-साथ readinessPorbe सक्षम करने के बाद यह जारी रहा। यह मूल मूल के साथ किया गया था। मैंने livenessProbe और readinessPorbe पर मूल लेख जोड़ा है, लेकिन जीसीई HTTP (एस) लोड बैलेंसर में इसके लिए कॉन्फ़िगरेशन विकल्प नहीं है।

वहाँ मुद्दे के कुछ अन्य प्रकार के होने के लिए के साथ भी लगता है, जैसे 8080 तक कंटेनर पोर्ट सेट करना और 80 से सर्विस पोर्ट जीकेई इंजेस कंट्रोलर के साथ काम नहीं करता है (फिर भी मैं स्पष्ट रूप से इंगित नहीं करता कि समस्या क्या थी)। और मोटे तौर पर, यह मुझे लगता है कि बहुत कम दृश्यता है और दृश्यता के संबंध में अपना खुद का प्रवेश कंटेनर चलाने का एक बेहतर विकल्प है।

मैं अपने प्रोजेक्ट के लिए Traefik उठाया, यह बॉक्स के बाहर काम किया है, और मैं आइए एन्क्रिप्ट एकीकरण सक्षम करना चाहते हैं। ट्राफिक प्रकट करने के लिए मुझे केवल एक ही बदलाव करना था, क्लस्टर के बाहर से यूआई तक पहुंच को अक्षम करने और बाहरी लोड बैलेंसर (जीसीई टीसीपी एलबी) के माध्यम से मेरे ऐप का पर्दाफाश करने के लिए सेवा ऑब्जेक्ट को ट्वीव करना था। इसके अलावा, Traefik Kubernetes के लिए अधिक देशी है। मैंने हेप्टीओ कंटूर की कोशिश की, लेकिन बॉक्स से कुछ काम नहीं किया (यह नया संस्करण आने पर अगली बार जाने देगा)।

0

मैं एक ही मुद्दा रहा था। यह पता चला है कि मुझे सेवा स्वास्थ्य को प्रमाणित करने के लिए प्रवेश करने से कुछ मिनट पहले इंतजार करना पड़ा था। किसी readinessProbe और linvenessProbe की तरह ही और किया सभी कदम करने जा रहा है, तो बस सुनिश्चित करें कि आपकी प्रवेश एक सेवा है जो या तो एक NodePort है की ओर इशारा करते है, और जब तक पीले रंग की चेतावनी आइकन हरे एक में बदल जाता है कुछ मिनट प्रतीक्षा। साथ ही, क्या हो रहा है इसके बारे में एक बेहतर विचार प्राप्त करने के लिए स्टैकडिवर पर लॉग की जांच करें। और livenessProbe/login पर gce कक्षा के लिए है। तो मुझे नहीं लगता कि यह /healthz पर होना चाहिए।

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