1

2 つのアプリケーションをデプロイしようとしています (2 つの個別のデプロイ オブジェクトの背後にあります)。type の Deployment ごとに 1 つの Service がありNodePortます。

application1_service.yaml

apiVersion: v1
kind: Service
metadata:
  name: application1-service
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: application1
  type: NodePort

application2_service.yamlまったくname同じです (とを除くrun)

Ingress を使用して 2 つのサービスを利用できるようにします。

ingress.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "my-static-ip"
    networking.gke.io/managed-certificates: "my-certificate"
    kubernetes.io/ingress.class: "gce"
spec:
  rules:
  - host: "my.host.com"
    http:
      paths:
      - path: /*
        backend:
          serviceName: application1-service
          servicePort: 80
      - path: /application2/*
        backend:
          serviceName: application2-service
          servicePort: 80

ManagedCertificateHTTPS リクエストを処理できるように、オブジェクトも作成します。

managed_certificate.yaml

apiVersion: networking.gke.io/v1beta1
kind: ManagedCertificate
metadata:
  name: my-certificate 
spec:
  domains:
    - my.host.com

ここで奇妙なのは、curl https://my.host.com/問題なく動作し、サービスにアクセスできることですが、試してみるcurl https://my.host.com/application2/404 Not Found.

ルートが機能していて、他のルートが機能していないのはなぜですか?

追加情報: ManagedCertificate は有効であり、正常に動作し/ます。application1 と application2 はまったく同じアプリであり、イングレスでそれらを交換すると、出力は同じになります。

ご協力いただきありがとうございます !

編集:

application2 にアクセスしようとすると、404 が表示されます。

404

それが役立つかどうかはわかりませんが、404 を示すイングレス アクセス ログの一部もここにあります。

ログ

4

3 に答える 3

0

私自身の質問に答える:

何日も検索した後、最終的に問題の原因を見つけました。

クラスターと構成はすべて問題ありませんでした。私の問題はFlask APIにありました。

すべての URL は次のようなものでした。

@app.route("/my_function")

そのため、ルートパスでは正常に機能していましたmy.host.com/my_functionが、入力my.host.com/application1/my_functionしていると機能しませんでした...

アプリを次のように変更しました

@app.route("/application1/my_function")

すべてが正常に動作するようになりました:)それが役立つことを願っています!

于 2021-07-20T16:10:14.220 に答える
0
于 2021-07-16T10:42:54.757 に答える