簡潔にするために、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 にアップグレードされました
Baiduが最近アルゴリズムを更新した後、含まれるウェブサイトの数が急減しました。著者のウェブサイト...
ページが閲覧される時間の長さは、ユーザーがそのページに滞在する時間の長さと同じではありません。したが...
最近、ウェブマスターが中間にいるという声が絶えず聞こえてきており、Sanqin SEO も「SEO ...
[51CTO.com からのオリジナル記事] SAP と Oracle に次ぐ世界第 3 位のエンタ...
ハッカーが米国の3大信用機関の1つであるEquifaxのシステムを攻撃し、1億4,300万人の個人デ...
翻訳者 |ブガッティ校正:孫淑娟これら 2 つのマルチクラウド ネットワーク アーキテクチャを見て...
現在最も人気のアプリケーションはWeChatです。長い間QQの使い方を知らなかった超初心者でも簡単に...
精度の高い無料プロモーションといえば、QQとQQグループプロモーションが最高です。テンセントQQは登...
holderhost.com の openvz 用大容量メモリ VPS をご紹介します。サーバー構成...
電子商取引の発展に伴い、中国のビジネス分野は徐々に「有形」から「無形」へと移行しています。インターネ...
私はインターネット業界で4年以上働いています。この過程で、企業から非常に奇妙な要求をいくつか見てきま...
今日は私が以前お店を経営していた時に使っていたこの方法を紹介します。結果は素晴らしく、コンバージョン...
検索マーケティング (SEM) には、SEO と検索入札 PPC が含まれます。これらは、中国企業が...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますA5ベンチ...
組織内の複数の部門でワークフローやストレージのニーズが異なる場合は、マルチクラウド展開が役立ちます。...