web-dev-qa-db-ja.com

GKEの使用時に「デフォルトバックエンド-404」で応答するイングレス

GCPで最新のKubernetesバージョンを使用する(1.6.4)、次のIngress定義があります:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myproject
  namespace: default
  annotations:
    ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "gce"
spec:
  rules:
  - Host: staging.myproject.io
    http:
      paths:
      - path: /poller
        backend:
          serviceName: poller
          servicePort: 8080

これが私のサービスと展開です。

apiVersion: v1
kind: Service
metadata:
  name: poller
  labels:
    app: poller
    tier: backend
    role: service
spec:
  type: NodePort
  selector:
    app: poller
    tier: backend
    role: service
  ports:
  - port: 8080
    targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: poller
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: poller
        tier: backend
        role: service
    spec:
      containers:
      - name: poller
        image: gcr.io/myproject-1364/poller:latest
        imagePullPolicy: Always
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: staging
        - name: GET_HOSTS_FROM
          value: dns
        ports:
        - containerPort: 8080

私の/etc/hosts私は次のような行を持っています:

35.190.37.148 staging.myproject.io

ただし、default backend - 404上のエンドポイントをカールする場合staging.myproject.io

$ curl staging.myproject.io/poller/cache/status
default backend - 404

Minikube内でローカルに動作するまったく同じ構成を持っていますが、唯一の違いはドメイン(dev.myproject.io)、それは魅力のように機能します。

here および here および here からのものを含む、私が見つけることができるほとんどすべてを読んで試してみましたが、たぶん私はちょうど欠けています何か...アイデアはありますか?

12
cgf

IngressがGKEで実際に使用可能になるまで5〜10分かかります。その間、ステータスコード404、502、および500の応答を確認できます。

ここにイングレスチュートリアルがあります: https://cloud.google.com/container-engine/docs/tutorials/http-balancer 従うことをお勧めします。あなたが貼り付けたものに基づいて、私は次のように言うことができます:

  • 正しいservice.Type = NodePortを使用します。
  • ingress.kubernetes.io/rewrite-targetアノテーションについてはわかりませんが、それが問題である可能性があります。
  • アプリケーションが200 OKGET /リクエストに応答することを確認してください。
  • また、curl http://<ip>/を認識していますが、Ingressの仕様は/pollerエンドポイントのみを処理します。したがって、default backend - 404のクエリ中に/応答を受け取るのは正常です。 Ingress仕様で/パスのバックエンドを設定していません。
9
AhmetB - Google