簡潔にするために、Linkerd 自体は組み込みの Ingress コントローラーを提供していません。 Linkerd は、既存の Kubernetes Ingress ソリューションと併用できるように設計されています。 Linkerd を Ingress ソリューションに統合するには、次の 2 つが必要です。
Ingress コントローラをメッシュ化することで、トラフィックがクラスターに入るときに、Linkerd は L7 メトリックや mTLS などの機能を提供できるようになります。 Linkerd は、以下を含むほとんどの Ingress コントローラーとの統合をサポートしています。
イングレス-nginxここでは、クラスターで使用される ingress-nginx を例として、これを Linkerd と統合する方法を説明します。 $ kubectl get deploy -n イングレス- nginx まず、ingress-nginx-controller コントローラーを更新し、pod に linkerd.io/inject: enabled アノテーションを追加する必要があります。 kubectl でデプロイメントを直接編集できます。クラスター内の ingress-nginx は Helm Chart を使用してインストールされるため、値に次の構成を追加できます。 コントローラー: 次に、値を使用して再度更新します。 # Helm リポジトリをIngress - nginx リポジトリで更新します 更新後、ingress-nginx のコントローラー Pod に linkerd プロキシ サイドカー コンテナーが自動的に挿入されます。 $ kubectl get pods - n イングレス- nginx イングレス コントローラがメッシュに追加されたため、Linkerd メッシュの関連機能も備わっています。
対応するインジケーターデータは、Linkerd ダッシュボードでも確認できます。 イングレス-nginx メトリクス 対応するチャート情報は Grafana でも確認できます。 イングレス-nginx グラファナ 次に、Emojivoto アプリケーションに対応する Ingress リソース オブジェクトを追加して、サービスを外部に公開します。 # 絵文字- ingress.yaml 上記のリソース オブジェクトを適用するだけです。 $ kubectl apply -f emojivoto - ingress .yaml nip.io は任意の IP アドレスに対応するシンプルなワイルドカード DNS なので、etc/hosts ファイルを編集してカスタムのホスト名と IP アドレスのマッピングを設定する必要はありません。nip.io では、次の形式を使用して任意の IP アドレスをホスト名にマッピングできます。 名前なし:
名前付き:
nip.io は、<anything>[.-]<IP Address>.nip.io を「ドット」、「ダッシュ」、または「16 進数」表記の対応する <IP Address> にマッピングします。 ここでは、カスタム ドメイン名 emoji.192.168.0.52.nip.io を使用します。これは、ingress-nginx のエントリ アドレスである IP アドレス 192.168.0.52 に直接マッピングすることと同じなので、マッピングなしでサービスにアクセスできます。 絵文字 また、上記の Ingress では、 nginx.ingress.kubernetes.io/service-upstream: true というアノテーションが追加されていることにも注意してください。これは、Nginx Ingress Controller にトラフィックを Pod に直接ルーティングするのではなく、メッシュ アプリケーションのサービスにルーティングするように指示するために使用されます。デフォルトでは、Ingress コントローラーはターゲット サービスのエンドポイントを照会して、そのサービスの背後にある Pod の IP アドレスを取得します。トラフィックをメッシュ サービスに送信することで、負荷分散やトラフィック分割などの Linkerd の関連機能が有効になります。 ingress-nginx メッシュ サービスへのアクセスを制限するLinkerd ポリシー リソースを使用して、サービスにアクセスできるクライアントを制限できます。また、Emojivoto アプリを使用して、Voting マイクロサービスへのアクセスを制限し、Web サービスからのみ呼び出せるようにする方法も示します。 まず、投票サービス用のサーバー リソースを作成します。 Server は Linkerd の別の CRD カスタム リソースであり、ワークロードの特定のポートを表すために使用されます。サーバー リソースが作成されると、承認されたクライアントのみがアクセスできるようになります。 次のようなリソース オブジェクトを作成します。 # 投票- server.yaml 上記のリソース オブジェクトを適用するだけです。 $ kubectl apply -f 投票- サーバー.yaml サーバーは podSelector プロパティを使用して、記述する投票サービスの Pod を選択していることがわかります。また、適用する名前付きポート (grpc) も指定し、最後にこのポートで提供されるプロトコルが gRPC であることを指定します。これにより、プロキシがトラフィックを正しく処理し、プロトコル検出をスキップできるようになります。 このサービスにアクセスする権限がクライアントに与えられなくなったため、Web サービスから Voting への要求が拒否され始め、成功率が低下します。 Web サービスの Pod ログを直接表示して確認することもできます。 $ kubectl ログ-f web -svc -2 -f9d77474f -vxlrh -n emojivoto -c web -svc -2 linkerd viz authz コマンドを使用して、投票サービスに入るリクエストの承認ステータスを表示できます。 $ linkerd viz authz - n emojivoto デプロイ/ 投票 すべての受信リクエストが現在、許可されていない状態にあることがわかります。 次に、クライアントにサーバーへのアクセスを許可する必要があります。ここでは、別の CRD オブジェクト ServerAuthorization を使用する必要があります。このオブジェクトを作成して、上記で作成した投票サーバーへの Web サービス アクセスを許可します。対応するリソース マニフェスト ファイルは次のとおりです。 # 投票- サーバー- auth.yaml 上記のオブジェクトでは、spec.server.name を使用して上記の Server オブジェクトを関連付けます。 meshTLS は ServiceAccounts を ID ベースとして使用するため、認証も ServiceAccounts に基づいて行われます。したがって、spec.client.meshTLS.serviceAccounts を使用して、どのサービスが投票サービスにアクセスできるかを指定します。 リソース リストを直接適用することもできます。 $ kubectl apply -f 投票- サーバー- 認証.yaml このオブジェクトを使用すると、投票サービスへのすべてのリクエストが ServerAuthorization 投票グループによって承認されていることがわかります。 linkerd viz auth コマンドは時間枠内でクエリを実行するため、短時間に UNAUTHORIZED リクエストが表示される場合があることに注意してください。 $ linkerd viz authz - n emojivoto デプロイ/ 投票 gRPC クライアント Pod を作成し、そこから投票サービスにアクセスしてみることで、他の Pod からのリクエストが拒否されるかどうかをテストすることもできます。 $ kubectl run grpcurl --rm -it --image = networld / grpcurl --restart = Never --command -- ./grpcurl -plaintext vote -svc . 絵文字: 8080 絵文字。 v1 。 投票サービス/ VoteDog クライアントは承認されていないため、リクエストは PermissionDenied エラーで拒否されます。 必要な数の ServerAuthorization リソースを作成して、必要な数の異なるクライアントを認証できます。また、認証されていない (つまり、メッシュ化されていない) クライアント、すべての認証済みクライアント、または特定の ID を持つ認証済みクライアントのみを認証するかどうかを指定することもできます。 さらに、クラスター全体のデフォルト ポリシーを設定することもできます。このポリシーは、定義されていないすべてのサーバー リソースに適用されます。 Linkerd は、リクエストを許可するかどうかを決定する際に次のロジックを使用します。
たとえば、linkerd アップグレード コマンドを使用して、デフォルトのポリシーを拒否に設定できます。 $ linkerd アップグレード-- policyController を設定します。 デフォルト許可ポリシー= 拒否| kubectl を適用- f - あるいは、config.linkerd.io/default-inbound-policy アノテーションを設定することで、単一のワークロードまたは名前空間にデフォルト ポリシーを設定することもできます。 つまり、Server および ServerAuthorization オブジェクトを作成して明示的に承認しない限り、すべてのリクエストは拒否されます。この場合、ライブネス プローブと準備プローブには明示的な承認が必要です。そうしないと、Kubernetes は Pod がライブまたは準備完了であると認識できず、再起動してしまいます。次のようなポリシー オブジェクトを作成して、すべてのクライアントが Linkerd 管理ポートにアクセスできるようにし、Kubernetes が生存性と準備状況のチェックを実行できるようにします。 $ 猫<< EOF | kubectl を適用- f - Kubelet (ヘルスチェックを実行する) の IP アドレスまたは範囲がわかっている場合は、ServerAuthorization をそれらの IP アドレスまたは範囲にさらに制限できます。たとえば、Kubelet が 10.244.0.1 で実行されていることがわかっている場合は、ServerAuthorization を次のように変更できます。 # ServerAuthorization "admin-kublet" : 認証されていないアクセスを許可します 注目すべきもう 1 つの点は、Server リソースを作成した後、ServerAuthorization を作成するまでの間に、すべてのリクエストが拒否される期間があることです。ライブ システムでこのような状況を回避するには、サービスをデプロイする前にポリシー リソースを作成するか、サーバーを作成する前に ServiceAuthorizations を作成して、クライアントがすぐに承認されるようにすることをお勧めします。 認可ポリシーの詳細については、https://linkerd.io/2.11/reference/authorization-policy/ にある公式ドキュメントを参照してください。 |
>>: Linkerd が新しいバージョン 2.12 にアップグレードされました
SEO をしばらくやってきた SEO 担当者は、自分の実践を経て、Baidu に不正ポイント システ...
中国で誕生した最初のインキュベーションプロジェクトであるHarborが、Cloud Native C...
中秋節はもうすぐそこです。あと1か月ちょっとです。そこで、誰もがトラフィックを増やすために中秋節の最...
「IBMはOpenStack組織に加盟して以来、OpenStackエコシステムの構築に積極的に関わり...
暗く風の強い夜、武術の達人たちが少林寺や武当山のふもとの荒れ果てた寺院に集まり、焚き火を焚き、古酒を...
IDCはこのほど、2022年上半期の中国パブリッククラウドサービス市場に関するデータを発表し、市場規...
データセンター間でのデータ同期は、企業が災害復旧能力を向上させるために不可欠な手段です。ソーシャルネ...
みなさんこんにちは。私はMuzi Chengzhouです。権威の高いウェブサイトには、新しいウェブサ...
検索エンジン最適化のプロセスにおいて、一部の Web サイトは検索エンジンで非常に高いランクを獲得す...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスインターネット時代の到来...
[[242514]] 1. VMware が esxi ネットワーク カード ドライバーをアップグレ...
この記事では、11 月のモバイル インターネット業界のトップ 1000 ランキングを紹介します。注:...
WeChat は確かに簡単には手に入りません。6 億人のユーザーと数百万の公開アカウントを持つ We...
サイト全体の最適化プロジェクトを運用する場合、デッドリンクツールを使用して、Web サイト上のデッド...
百度の年次総会で、ロビン・リー氏は2012年の百度の業績を総括し、2012年は百度にとって最も困難な...