web-dev-qa-db-ja.com

同じバックエンドサービス内の複数のパスのK8S入力規則

入力ロードバランサを設定しようとしています。基本的に、私は複数のパスを持つ単一のバックエンドサービスを持っています。

私のバックエンドのNodeportのサービス名はこんにちはアプリであるとしましょう。このサービスに関連付けられているポッドは、/ fooおよび/ barのような複数のパスを公開します。以下は例です

Nodeportサービスと関連展開

apiVersion: v1
kind: Service
metadata:
  name: hello-app
spec:
  selector:
    app: hello-app
  type: NodePort
  ports:
    - protocol: "TCP"
      port: 7799
      targetPort: 7799
---
apiVersion: apps/v1 
kind: Deployment
metadata:
  name: hello-app
  labels:
    app: hello-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello-app
  template:
    metadata:
      labels:
        app: hello-app
    spec:
      containers:
      - name: hello-app
        image: us.gcr.io/hello-app:latest
 _

今すぐオンのようなリクエストは404エラーに直面しています。

http://{ingress-address:port}/foo
http://{ingress-address:port}/bar
 _

私は以下の入力構成を代替的に試みましたが、どちらの場合も役に立ちませんでした。

入力設定1

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: basic-ingress
spec:
  rules:
  - http:
      paths:
      - path: /*
        backend:
          serviceName: hello-app
          servicePort: 7799
 _

入力構成2

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: basic-ingress
spec:
  backend:
    serviceName: hello-app
    servicePort: 7799
 _

エラーメッセージ

10.88.16.10 - 20/1月/ 2019年08:50:55] [2019-01-20 08:50:55] [情報] [_INTERNAL] [_LOG] 10.88.16.10 - - [20/1月/ 2019 08:50:55] "Get/HTTP/1.1" 404 -

私は述べています--- [この リンクですが、さまざまなパスとは異なるバックエンドサービスを参照すると仮定しています。私の場合、複数のパスが同じバックエンドサービスに属します。

フルパスがインバロケーションからダウンストリームバックエンドサービスに転送されていないように見えます。誰かが上記の要件のために入力を構成する正しい方法は何ですか?

5
Neeraj

入力についてもっと学んだ後に私の質問に答える。

下流への誤ったパス転送の問題ではありませんでした。基本的にはGKE入力コントローラは、基本的なReadyNessプローブがバックエンドに存在することを期待しています。私は私の展開でこれを欠いていました、そしてITの入り口のベッケーズは「不明」としてバックエンドをマーキングしていました

最終的に他のスタックオーバーフローの質問を上に読むのは問題を解決するのを助けました

gcp-load-balancer-backend-status-unknown

kubernetes-ingress-gce-heens-reputing-502エラー

下記のようにReady Probeを導入した後、入力は正しくバックエンドを検出し、バックエンドを要求することができました。

apiVersion: apps/v1 
kind: Deployment
metadata:
  name: hello-app
  labels:
    app: hello-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello-app
  template:
    metadata:
      labels:
        app: hello-app
    spec:
      containers:
      - name: hello-app
        image: us.gcr.io/hello-app:latest
        readinessProbe:
          httpGet:
            path: /healthz
            port: 7799
          periodSeconds: 1
          timeoutSeconds: 1
          successThreshold: 1
          failureThreshold: 10     
 _
2
Neeraj

GLBCの入力でマルチパスを使用するには、次の例などのさまざまなサービス名を持つ必要があります。また、各サービス(バックエンド)には異なるパスがあり、1つの入力を設定できます(2つは2)。

だから、あなたが2つのロードバランサを持つことができない限り、あなたは2つの入り口を必要としません

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fanout-ingress
spec:
  rules:
  - http:
      paths:
      - path: /*
        backend:
          serviceName: web
          servicePort: 8080
      - path: /v2/*
        backend:
          serviceName: web2
          servicePort: 8080
 _

マルチポートサービスがあり、Kubernetesはサービスオブジェクト上の複数のポート定義をサポートしています。複数のポートを使用するときは、すべてのポート名を指定する必要があります。下記の例を参照してください

ここでは、Kubernetes Ingressを使用した答えです nginx

kind: Service
apiVersion: v1

    metadata:
      name: my-service
    spec:
      selector:
        app: MyApp
      ports:
      - name: http
        protocol: TCP
        port: 80
        targetPort: 9376
      - name: https
        protocol: TCP
        port: 443
        targetPort: 9377
 _
1
Alioua