入力ロードバランサを設定しようとしています。基本的に、私は複数のパスを持つ単一のバックエンドサービスを持っています。
私のバックエンドの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
_
エラーメッセージ
私は述べています--- [この リンクですが、さまざまなパスとは異なるバックエンドサービスを参照すると仮定しています。私の場合、複数のパスが同じバックエンドサービスに属します。
フルパスがインバロケーションからダウンストリームバックエンドサービスに転送されていないように見えます。誰かが上記の要件のために入力を構成する正しい方法は何ですか?
入力についてもっと学んだ後に私の質問に答える。
下流への誤ったパス転送の問題ではありませんでした。基本的には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
_
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
_