2017-10-12 1 views
2

TL;何らかの理由でDRすべてのHTTPサービスは、私がKubernetesにかなり新たなんだとイングレスロードバランサを設定しようとしているパスが/Kubernetes入力ロードバランサはすべてをインデックスに書き換えます。どうして?

として書き直されているようです。

Client Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.6", GitCommit:"4bc5e7f9a6c25dc4c03d4d656f2cefd21540e28c", GitTreeState:"clean", BuildDate:"2017-09-14T06:55:55Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"darwin/amd64"} 
Server Version: version.Info{Major:"1", Minor:"7+", GitVersion:"v1.7.6-gke.1", GitCommit:"407dbfe965f3de06b332cc22d2eb1ca07fb4d3fb", GitTreeState:"clean", BuildDate:"2017-09-27T21:21:34Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"} 

私は良いことですGoogleのコンテナエンジン(GKE)それは部分的に取り組んでいます

、中にすべてのものを設定しています。しかし何らかの理由で、リクエストが/に向けられているかのように、すべてのサービスを私のサービスにルーティングしています。

ここには何が起こっていますか?私の推測は貧弱な構成です。問題はない - 私はapi.example.com/my_service/への要求は、その後myServiceというのインデックスから来るよう依頼を登録します作るたび

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: main-ingress 
    annotations: 
    kubernetes.io/ingress.global-static-ip-name: "ingress-main-ip" 
spec: 
    tls: 
    - secretName: cert-main 
    hosts: 
    - api.example.com 
    rules: 
    - host: api.example.com 
    http: 
     paths: 
     - path: /my_service/* 
     backend: 
      serviceName: myService 
      servicePort: main-port 
     - path: /my_service2/* 
     backend: 
      serviceName: myService2 
      servicePort: main-port 

。 myService2

に行く。しかし、私はhttps://api.example.com/my_service/bogus/path/that/should/return/404に要求を行うたびその後、私のサービスは、要求が再び以前と同じように/パスに向けられていると考えているようだhttps://api.example.com/my_service2/

同じこと。

もちろん、私はmyServiceをローカルで実行します(これはGo HTTPサーバーになります)。特に明確にすることが127.0.0.1/bogus/path/that/should/return/404ローカルこれを実行すると、期待通りに404を返します(もちろん、他のAPIエンドポイントでも動作する)

ここでは非常に奇妙なことだ:私は直接、静的IPアドレスを訪問するたびに(別名ingress-は、 main-ip、1.2.3.4と言うことがあります)。たとえば、http://1.2.3.4/my_service/またはhttp://1.2.3.4/my_service2/です。常には、GKEのデフォルトバックエンドから404を返します。サービスがルーティングされない場合もあります。

概要:

  1. なぜ要求のドメインのバージョンはすべて、なぜ直接IP要求は全く動作しません/
  2. にルーティングされますか?

ありがとうございました!

答えて

1

ロバートは私のすべてのパスがそれはパスが送られていることが判明し/

に書き換えているように見えた理由私は、メインの質問を考え出した2番目の質問(感謝)

についての権利であります実際のサービスへの入力構成で指定された「パス」を持つサーバー。 、api.example.com/my_service/my_endpointにGETリクエストをやろうとしたときに は、したがって、たとえば、私はパス/my_endpointを取得するためにmy_serviceを期待していたが、それは実際にこれが私の意見ではかなり悪いkubernetesの副作用のように思えるフル/my_service/my_endpoint

を得ていましたパスは実際には相対的な書き換えになります。

いずれにしても、現在修正されています。なぜなら、何らかの理由で(ロジックエラーが私のコードに書いた)私のマルチプレクサがすべての未知の要求をキャプチャしてそれを私のインデックスコントローラに送るからです。なぜなら、私は彼らがすべて/に書き直されていると思ったからです。 Go figure!

0

私は2番目の質問に答えます。

あなたはルールセクションでそれを指定したため非常に奇妙なことが原因HTTPヘッダ「ホスト」事項にある:

rules: 
    - host: api.example.com   <----- THIS 
    http: 
     paths: 
     - path: /my_service/* 
     backend: 
      serviceName: myService 
      servicePort: main-port 
     - path: /my_service2/* 
     backend: 
      serviceName: myService2 
      servicePort: main-port 

だから、それが適切なサービスへの要求ルーティングするために使用されます。 サービスコントローラーがnginxの場合、「host:」はserver_nameとなります。

関連する問題