問題タブ [spring-cloud-kubernetes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Spring Cloud Config Client は、Kubernetes を検出クライアントとして使用することをサポートしていますか?
Kubernetes で Spring Cloud Config Client を実行しています。spring-cloud-kubernetes
サービスの検出に依存関係を使用しておりspring-cloud-kubernetes-ribbon
、設定することでSpring Cloud Config Serverを検出できることを期待していますがspring.cloud.config.discovery.enabled=true
、機能していません。
背景:
私は、Kubernetes のサービスが Spring Cloud Eureka for Service Discovery を最小限の構成で置き換えることができることを証明しようとしています。
Spring Cloud Config サーバー (名前config-server
は 、 port 8888
) を同じ名前空間の個別のサービスとして Kubernetes に Spring Boot マイクロサービスと共にデプロイし、構成サーバーとマイクロサービスの両方@EnableDiscoveryClient
でSpring Cloud Kubernetes を使用しました。Application.java
マイクロサービスで次のプロパティを指定しましたbootstrap.properties
が、マイクロサービスは常に から構成を取得しようとしますlocalhost:8888
。
上記の構成を次のものに置き換えた場合にのみ、サーバーから構成を正常に取得できます。
spring-boot - Spring Cloud Kubernetes の Service Discovery を使用できるように Spring Cloud Gateway アプリケーションをセットアップする方法は?
どちらも Kubernetes クラスターにデプロイされる 2 つの Spring Boot アプリケーションを作成しました。これらのアプリの 1 つがゲートウェイとして機能するため、Spring Cloud Gateway を依存関係として使用します。また、サービス ディスカバリを Spring Cloud Kubernetes と統合し、ゲートウェイがサービス ディスカバリを使用して対応するルートを自動的に生成するようにしたいと考えています。しかし、ローカルの Minikube クラスターで実行されているゲートウェイ アプリケーションを公開し、2 番目のアプリ/サービスを呼び出すと、次のメッセージで 503 エラーが発生します。Unable to find instance for ...-service
現在、私は以下をインストールしました:
- ミニキューブ
- VirtualBox
- Docker ツールボックス
2 つのサブプロジェクト (ゲートウェイと別のサービス) を持つ Gradle プロジェクトを作成しました。すべてのプロジェクトはローカルでビルド/デプロイされます。デフォルトのサービス アカウントには、Kubernetes API を読み取る権限があります。これらのサービスをデプロイした後、ゲートウェイ サービスを外部に公開します。ゲートウェイ サービスには、いくつかのエンドポイントが実装されています。
- DiscoveryClient を介してクラスター内のすべてのサービスのリストを提供します。
- アプリケーション層では、DiscoveryClient によって提供された URI に基づいて他のサービスを呼び出します。
すべてが機能しているように見えますが、他のサービスを呼び出すとURI/serviceId
503 エラーが発生します...
以下の Spring Cloud バージョンが使用されています: spring-cloud-starter-kubernetes 1.0.1.RELEASE spring-cloud-starter-gateway 2.1.1.RELEASE
私のデモ アプリはhttps://github.com/nmaoez/spring-cloud-gateway-kubernetesで入手できます。README.md には、両方のサービスをローカルの Minikube クラスターにデプロイする手順が記載されています。また、使用可能なすべてのエンドポイントが表示されます。しかし、興味深い部分は、application.yaml とゲートウェイのアプリケーション クラスです。
アプリケーション.yaml:
GatewayApplication.java
gateway-service/application.yaml の url-expression フィールドを
その後、呼び出した後、正しい応答が得られましたgateway-uri/another-service/
。しかし、私の願いは、のデフォルトを明示的に置き換えないことですlb://serviceid
。どうやってやるの?
ゲートウェイを介してクラスター内の別のサービスを呼び出すと、200 応答が返され、アプリケーションの残りのコントローラーに基づいて正しい答えが得られると思います。