web-dev-qa-db-ja.com

複数のターゲットを使用したkubernetes入力-書き換え

通常、入力書き換えターゲットは次のように機能します。

nginx.ingress.kubernetes.io/rewrite-target: /

これにより、サービス名のターゲットがルートディレクトリにあるように書き換えられます。だから私がこれを持っているなら:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  rules:
    http:
      paths:
      - path: /
        backend:
          serviceName: front-main
          servicePort: 80
      - path: /api
        backend:
          serviceName: back-main
          servicePort: 80

私のサービスは、/にあるのと同じようにデータを受信します。ただし、サービスfront-mainにルート/を送信し、サーバーback-main/someotherpath/を送信したいと思います。これどうやってするの?

次のようなものはありますか?

nginx.ingress.kubernetes.io/rewrite-target: "front-main: / ; back-main: /someotherpath"

ドキュメントに答えが見つからないようです。

8
silgon

残念ながら、Nginxの無料バージョンに基づくIngressにはその機能がありません。

ただし、 Nginx PlusベースのIngress を使用できる場合は、アノテーションを使用して実行できます。

これが 公式リポジトリからです:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    nginx.org/rewrites: "serviceName=tea-svc rewrite=/;serviceName=coffee-svc rewrite=/beans/"
spec:
  rules:
  - Host: cafe.example.com
    http:
      paths:
      - path: /tea/
        backend:
          serviceName: tea-svc
          servicePort: 80
      - path: /coffee/
        backend:
          serviceName: coffee-svc
          servicePort: 80

以下は、tea-svcへのリクエストのURIがどのように書き換えられるかの例です(/ teaリクエストは/ tea /にリダイレクトされることに注意してください)。

/tea/ -> /
/tea/abc -> /abc

以下は、coffee-svcへのリクエストのURIがどのように書き換えられるかの例です(/ coffeeリクエストは/ coffee /にリダイレクトされることに注意してください)。

/coffee/ -> /beans/
/coffee/abc -> /beans/abc
9
Anton Kostenko

別の解決策は、2つの入力yamlファイルを作成することです

それぞれが異なる注釈を使用しています。できます!

0
Juan Enciso