1. ホーム
  2. Web プログラミング
  3. ASP.NET
  4. 実用的なヒント

30分でわかるコング経由の.NETゲートウェイ

2022-01-14 17:11:07

Kongとは

Openrestryは、NginxとLuaをベースにした高性能なプラットフォームで、内部には多数のLuaライブラリが搭載されています。Kong は Openrestry アプリケーションであり、Openrestry は Nginx 上で動作し、nginx を Lua で拡張しています。したがって Kong = Openrestry + nginx + lua と考えてください。Kong は高い拡張性を持ち、プラグイン機構によって拡張可能です。

公式ドキュメント: https://docs.konghq.com/
Github: https://github.com/Kong/kong

原理・原則

クライアントのリクエストはKongに届き、KongはそれがどのConsumerであるかを特定し、ルーティングルールに基づいて、サービスに対応する上流サービスにリクエストを転送する。このプロセスに関わるコアコンポーネントを見てみましょう。

コンシューマー。Consumerのプラグインを定義し、リクエストルールを設定することができるアプリケーションを表します。

ルート。クライアントとサービスをマッチングさせるためのルールで、Kongのエントリーポイントになる。Routeのルールにマッチすると、それに関連するServiceにプロキシされ、RouteはServiceに対応し、Serviceは複数のRouteを持つ

サービス:当社のAPIやアップストリームサーバーを管理します。サービスの主なプロパティは、URL、ポート、プロトコルなどです。

アップストリーム Kongの背後に位置するサービス/API、ロードバランシングのための複数インスタンス展開

プラグイン。認証、レート制限などの高度な機能を提供し、ゲートウェイを拡張する。

Kongのインストール

公式ドキュメント:https://konghq.com/install/#kong-community

エンタープライズ版とオープンソース版があり、今回はエンタープライズ版をインストールしたが、オープンソースの機能しか使っていない

# pull image 
docker pull kong/kong-gateway:2.6.0.0-alpine

#tag 
docker tag kong/kong-gateway:2.6.0.0-alpine kong-ee

#create network 
docker network create kong-ee-net

#Run the database container 
docker run -d --name kong-ee-database --network=kong-ee-net -p 5432:5432 -e "POSTGRES_USER=kong" -e "POSTGRES_DB=kong" -e " quot;POSTGRES_PASSWORD=kong" postgres:9.6

#database migration
docker run --rm --network=kong-ee-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-ee-database" -e "KONG_PG_ PASSWORD=kong" -e "KONG_PASSWORD={PASSWORD}" kong-ee kong migrations bootstrap

#RunKong
docker run -d --name kong-ee --network=kong-ee-net -e "KONG_PROXY_LISTEN=0.0.0.0:8000,0.0.0.0:9080 http2" -e "KONG_DATABASE= postgres" -e "KONG_PG_HOST=kong-ee-database" -e "KONG_PG_PASSWORD=kong" -e "KONG_PROXY_ACCESS_LOG=/dev/ stdout" -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" -e "KONG_PROXY_ERROR_LOG=/dev/stderr" -e "KONG_ADMIN_ERROR_ LOG=/dev/stderr" -e "KONG_ADMIN_LISTEN=0.0.0.0:8001" -e "KONG_ADMIN_GUI_URL=http://{HOSTNAME}:8002" -p 8000: 8000 -p 8443:8443 -p 8001:8001 -p 8444:8444 -p 8002:8002 -p 8445:8445 -p 8003:8003 -p 8004:8004 -p 9080:9080 kong-ee

ビジュアルインターフェイスKongaのインストール

公式ソースコード: https://github.com/pantsel/konga

docker pull pantsel/konga

docker run -d -p 1337:1337 --network kong-ee-net -e "TOKEN_SECRET=kongtoken" -e "DB_ADAPTER=postgres" -e "DB_HOST= kong-ee-database" -e "DB_USER=kong" -e "DB_PASSWORD=kong" --name konga pantsel/konga

localhost:1337にアクセスし、新しいユーザーを作成し、ログインして接続を作成:test/http://192.168.43.94:8001、kong apiにポート8001を指定します。

KongプロキシHTTPサービス

使用するデモプロジェクトは、https://github.com/cysnet/gateway-aspnetcore-demo、以下の内容です。

  • Httpサービス。サーバー1、サーバー2
  • Grpcサービス。GrpcService1、GrpcService2
  • Grpcクライアント。GrpcClient
  • IdentityServer4 サービス。Idstest
  • ロギングサービス。LogServer

1.プロキシHttpサービスはServer1を使用し、Server1を起動します。

2. 管理者用apiでKongにサービスを作成するか、ビジュアルインターフェースのKongaを使用する

<ブロッククオート

POST http://192.168.43.94:8001/services   --data name=server1 --data url='http://192.168.43.94:5000'

3. ルートは管理者用apiで作成されますが、ビジュアルインターフェースのKongaを使用して作成することも可能です

<ブロッククオート

http://192.168.43.94:8001/services/server1/routes   -データ 'paths[]=/http1'-data name=http1

4. テスト

香港プロキシGrpcサービス

1. プロキシGrpcはGrpcService1を使用し、GrpcService1を起動します。

2. 管理者用apiでKongにサービスを作成するか、ビジュアルインターフェースのKongaを使用する

<ブロッククオート

POST 192.168.43.96:8001/services --data name=gserver1 --data protocol=grpc --data host=192.168.43.94 --data port=6001

3. 管理者APIでルートを作成するか、ビジュアルインターフェースのKongaを使用する

<ブロッククオート

POST 192.168.43.94:8001/services/gserver1/routes --data protocols[]=grpc --data name=r-gserver1 --data paths[]=/greet

4. GrpcClientの実行テスト

コングロードHttpサービス

1. Server1 を Server2 で起動する

2. 管理者用apiでKongにアップストリームを作成するか、ビジュアルインターフェースのKongaを使用します。

<ブロッククオート

POST http://192.168.43.94:8001/upstreams -データ名=u-http1

3. u-http1 のターゲットを作成し、server1 と server2 を指すようにします。

POST http://192.168.43.94:8001/upstreams/u-http1/targets   --data target='192.168.43.94:5000'
POST http://192.168.43.94:8001/upstreams/u-http1/targets   --data target='192.168.43.94:5001'

4. 4. http1 サービスが上流の u-htttp1 を指すように変更する。

パッチ http://192.168.43.94:8001/services/server1 --data host='u-http1'

5. 以下のapiを呼び出してテストします。

http://192.168.43.94:8000/http1/Name

KongロードGrpcサービス

1. GrpcService1 と GrpcService2 を起動します。

2. 管理者用apiでKongにアップストリームを作成するか、ビジュアルインターフェースのKongaを使用します。

<ブロッククオート

POST http://192.168.43.94:8001/upstreams -データ名=u-gserver1

3. u-gserver1のターゲットとして、GrpcService1およびGrpcService2を指定する。

POST http://192.168.43.94:8001/upstreams/u-gserver1/targets   --data target='192.168.43.94:6001'
POST http://192.168.43.94:8001/upstreams/u-gserver1/targets   --data target='192.168.43.94:6002'

4. gserver1 サービスが上流の u-gserver1 を指すように変更する。

パッチ http://192.168.43.94:8001/services/gserver1 -データ host='u-gserver1'

5. テスト、GrpcClientの実行

JWT認証のためのIdentityServer4の統合

1. server1 の jwt プラグインを有効化します。

POST http://localhost:8001/services/server1/plugins -d "name=jwt " -d "config.key_claim_name=client_id"

2. コンシューマの作成

POST localhost:8001/consumers -d "username=c-server1"。

3. ids4証明書の公開鍵と秘密鍵の取得

openssl インストール https://slproweb.com/products/Win32OpenSSL.html

openssl pkcs12 -in chester.pfx -nocerts -nodes -out private_pc.key
Extract the private key from the key pair (header format: -----BEGIN RSA PUBLIC KEY-----)
openssl rsa -in private_pc.key -out private.pem
Extract public key from key pair (header format: -----BEGIN PUBLIC KEY-----)
openssl rsa -in private_pc.key -pubout -out public.key

4. C-server1用のクレデンシャルを作成する

POST localhost:8001/consumers/c-server1/jwt -d "algorithm=RS256" -d "key=big_cat" -d "secret=xxxxxx" -d ";rsa_public_key=xxxxxxx"

5. jwttokenを取得するためにid4testを起動します。

6. トークンを検証するためにAPIを呼び出す

流量制限プラグイン「RateLimit

<ブロッククオート

POST http://<admin-hostname>:8001/plugins -データ名=rate-limiting -データconfig.minute=5 -データconfig.policy=redis -データredis_host=192.168.43.102 -データlimit_by=ip -データredis_password=123456

トリガーとトリガーリミットを複数回呼び出す

キャッシュプラグイン

<ブロッククオート

POST http://localhost:8001/plugins   -データ名=proxy-cache -データconfig.content_type="text/plain; charset=utf-8" -データconfig.cache_ttl=30 -データconfig.strategy=memory

X-Cache-Status=Hit を複数回呼び出すと、キャッシュヒットに成功する。

ログ取得プラグイン

LogServerの起動

ロギングプラグインをオンにする

POST http://localhost:8001/services/server1/plugins   --data "name=http-log" --data "config.http_endpoint=http://192.168.43.94:5555/Log" --data "config.method=POST& quot.Data.Data.Data.Data.Data.Data.Data.Data.Data。

http://192.168.43.94:8000/http1/Name をリクエストし、LogServer の出力を表示する

30分でKong経由のNETゲートウェイはこの記事のすべてです、Kongゲートウェイについての詳細については、過去の記事を検索するか、次の記事を参照してください続けてください。