web-dev-qa-db-ja.com

複数のホストを設定するKubernetes Ingress

2つのシンプルなkubernetesサービスとデプロイを設定しました-フロントエンドとAPI。フロントエンドはAPIからデータを取得するので、APIも公開しているので、フロントエンドのデータフェッチ呼び出しでバックエンドの入力URLをハードコーディングできます(クラスター内でこれを行うより良い方法を誰かが知っている場合は、お知らせください)。

サービスごとに異なるホスト名を設定しようとしていますが、何らかの理由で1つのホスト名しか機能していません。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-webapp-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - Host: test-webapp-frontend.com
    http:
      paths:
        - path: /
          backend:
            serviceName: test-webapp-frontend-lb
            servicePort: 8002
  - Host: test-webapp-api.com
    http:
      paths:
        - path: /get
          backend:
            serviceName: test-webapp-api-lb
            servicePort: 8001

そして、これはkubectl get svcを実行した後に得られるものです

NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes                ClusterIP      10.96.0.1        <none>        443/TCP          2d
test-webapp-api-lb        LoadBalancer   10.107.60.163    <pending>     8001:30886/TCP   1h
test-webapp-frontend-lb   LoadBalancer   10.104.100.108   <pending>     8002:31431/TCP   1h

ローカルでminikubeを使用してこのクラスターを実行しています。 minikube service test-webapp-frontend-lbminikube service test-webapp-api-lbを実行すると、フロントエンドとAPIの両方にアクセスできます。

test-webapp-frontend.comにアクセスすると、フロントエンドページは表示されますが、test-webapp-api.comにアクセスできません。デフォルトのnot-foundエラーでもありません。URLが存在しないかのようにアクセスできません。

奇妙なことは、これを行うと、

spec:
  rules:
  - Host: test-webapp-frontend.com
    http:
      paths:
        - path: /
          backend:
            serviceName: test-webapp-frontend-lb
            servicePort: 8002
  - Host: test-another-frontend.com
    http:
      paths:
        - path: /
          backend:
            serviceName: test-webapp-frontend-lb
            servicePort: 8002

test-webapp-frontend.comには引き続きアクセスできますが、test-another-frontend.comにも同じ問題があり、まったくアクセスできません。

何が悪いのですか?

5
mkim

DNSの問題のようです。 「test-webapp-frontend.com」のようなホスト名は、トラフィックをクラスターにルーティングするために、イングレスコントローラーのIPに解決する必要があります。入力コントローラーの出力に外部IPが表示されません。 minikubeの場合、Ingressアドオンを有効にすることができます。解決するパブリックIPがないため、DNSはminikubeで少しトリッキーです。 etc/hostsファイルを変更して名前を解決するか、代わりにパスベースのルールを使用できます。

this に役立つ links

4
Ryan Dawson