Linkerd が新しいバージョン 2.12 にアップグレードされました

Linkerd が新しいバージョン 2.12 にアップグレードされました

Linkerd の最新バージョン 2.12 がリリースされました。この大規模なバージョンでは、Linkerd にルーティングベースのポリシーが導入され、ユーザーは完全にゼロ トラスト方式で HTTP ルーティングベースの承認ポリシーを定義および実行できるようになります。これらのポリシーは、Linkerd の強力なワークロード ID に基づいて構築され、相互 TLS によって保護され、Kubernetes の新しい Gateway API の型を使用して構成されます。

変更履歴

Linkerd 2.12 は、Gateway API をコア構成メカニズムとして採用するための第一歩です。この API はまだサービス メッシュのユース ケースには最適ではありませんが、このリリースの強力な出発点となります。さらに重要なのは、Gateway API 上に構築することで、新しい機能を導入しても Linkerd 固有の構成オブジェクトの数を最小限に抑えることができることです。これは、Kubernetes 向けの最もシンプルで軽量なサービス メッシュを作成するという私たちの目標の重要な部分です。さらに、バージョン 2.12 では、Linkerd が Apache スタイルのリクエスト ログを生成できるようにする待望の機能であるアクセス ログが導入されました。 iptables-nft のサポートが追加され、その他多くの改善とパフォーマンス強化が導入されています。

ルートごとの戦略

Linkerd の新しいルートごとのポリシーは、既存のポートベースのポリシーを拡張して、サービスが相互に通信する方法をより細かく制御できるようにします。これらのポリシーは、暗号化だけでなく、強力なワークロード ID と明確な承認も必要とするゼロトラスト セキュリティ アプローチを採用している組織向けに設計されています。

  • ネットワークを敵対的なものとして扱います。IP アドレスに依存せず、CNI レイヤーや基盤となるネットワークのその他の側面が安全である必要もありません。
  • 安全なワークロード ID を使用する: Linkerd のワークロード ID は ServiceAccounts によって自動的に生成され、接続時に相互 TLS を介して暗号的に検証されます。
  • Pod レベルで適用: すべての接続とすべてのリクエストが認証されます。
  • 簡単に許可できるモデル: セキュリティを重視する採用者は、明示的に許可されない限り、デフォルトで機密リソースへのアクセスを簡単に拒否できます (「最小権限の原則」)。

ヘルス プローブと準備プローブは許可なしに通過する必要があるため、Kubernetes ではデフォルトで拒否する構成が問題になる可能性があります。 Linkerd 2.12 では、ヘルス プローブと準備プローブがデフォルトで承認されるようになりましたが、他のアプリケーション エンドポイントをロックダウンしながら明示的に承認することもできます。

ゲートウェイAPI

Linkerd 2.12 は、Kubernetes Gateway API のサポートに向けた第一歩を提供します。 Gateway API はもともと、Kubernetes の長年使用されてきた Ingress リソースのより豊富で柔軟な代替として設計されましたが、サービス メッシュ トラフィックを記述するための優れた基盤を提供し、Linkerd が増分構成を最小限に抑えることを可能にします。

Linkerd 2.12 では、Linkerd は、Linkerd のルートベースのポリシーを構成するための Gateway API の部分的な実装を提供します。この方法により、Linkerd にとって意味をなさない仕様の部分を実装することなく、Gateway API の使用を開始できます。 Gateway API が進化するにつれて、Linkerd のニーズを徐々に満たすようになります。

アクセスログ

Linkerd 2.12 ではアクセス ログも導入され、プロキシが Apache スタイルのリクエスト ログを出力できるようになりました。この機能は、パフォーマンスとリソース使用率の理由から(特にトラフィック量の多いワークロードの場合)、デフォルトではオフになっていますが、必要に応じて簡単に有効にすることができます。

その他の更新

Linkerd 2.12 には、他にも次のような数多くの改善、パフォーマンス強化、バグ修正が含まれています。

  • プロキシが正常にシャットダウンするための最大猶予期間を構成するための新しい config.linkerd.io/shutdown-grace-period アノテーション。
  • Linkerd の init コンテナで iptables-nft をサポートするための新しい iptables-nft モード。
  • 信頼のルートのローテーション後に、一部のコントロール プレーン コンポーネントが要求どおりに再起動されない問題を修正しました。
  • Linkerd 名前空間で予期しない Pod が見つかった場合に linkerd check コマンドで発生するクラッシュを修正しました。
  • proxy.await Helm 値を変更し、ユーザーがコントロール プレーン コンポーネントで linkerd-await を無効にできるようになりました。
  • 必要に応じて、Linkerd 拡張機能のデプロイメントをオートスケーラーによって削除できるようにするアノテーション。
  • Linkerd CNI プラグインをスタンドアロン モードで実行する機能。
  • マルチクラスター拡張機能の ServiceAccount トークン シークレットは、Kubernetes バージョン >= v1.24 をサポートします。

アップグレード

ここで、クラスター内の Linkerd を最新バージョン 2.12 にアップグレードします。

まず、次のコマンドを実行して Linkerd CLI ツールを更新する必要があります。

 $ curl -- proto '=https' -- tlsv1 .2 - sSfL https://run.linkerd.io/install |シュ

これにより、ローカル CLI が最新バージョンにアップグレードされます。もちろん、Linkerd のリリース ページから、対応するプラットフォームの CLI インストール パッケージを直接ダウンロードすることもできます。

 $ wget https://github.91chi.fun/https://github.com//linkerd/linkerd2/releases/download/stable-2.12.0/linkerd2-cli-stable-2.12.0-darwin-arm64
$ sudo mv linkerd2 -cli -stable - 2.12.0 - darwin - arm64 / usr / local / bin / linkerd
$ chmod + x / usr / local / bin / linkerd

CLI が正しくインストールされ、実行されていることを確認します。

 $ linkerd バージョン
クライアントバージョン: 安定版- 2.12.0
サーバーバージョン: 安定版- 2.11.1

CLI アップグレードが成功したことがわかります。コントロールプレーンはまだアップグレードされていないため、現在のバージョン 2.11.1 が引き続き表示されます。

これで、Kubernetes クラスター上の Linkerd コントロール プレーンをアップグレードできます。心配しないでください。既存のデータ プレーンは、コントロール プレーンの更新されたバージョンで引き続き実行され、メッシュ サービスが失敗することはありません。

viz プラグインに付属する Prometheus コンポーネントを使用している場合、アップグレード後にデータが失われます。外部 Prometheus を構成する場合、この問題を心配する必要はありません。

Linkerd SMI 拡張

CLI を使用して Linkerd 2.11.x をインストールし、TrafficSplit CRD を使用している場合は、TS CRD が不足していることに注意する必要があります。この CRD を使用していない場合は、この通知を無視できます。

TrafficSplit CRD は Linkerd 2.12.0 には同梱されなくなり、代わりに Linkerd SMI 拡張機能によって提供されるようになりました。

まず、リリース ページから対応する実行可能パッケージをダウンロードします。

 $ wget https://github.91chi.fun/https://github.com//linkerd/linkerd-smi/releases/download/v0.2.0/linkerd-smi-0.2.0-darwin-arm64
$ chmod + x linkerd - smi - 0.2.0 - darwin - arm64
$ sudo mv linkerd - smi - 0.2.0 - darwin - arm64 / usr / local / bin / linkerd - smi
$ linkerd - smi バージョン
v0.2.0

Linkerd SMI は CLI ツール経由でインストールすることもできます。この拡張機能には、SMI リソースをネイティブ Linkerd リソースに変換する SMI アダプターが含まれています。

 $ linkerd smi をインストール| kubectl を適用-f -
$ linkerd smi チェック

あるいは、次の Helm メソッドを使用して Linkerd SMI 拡張機能をインストールすることもできます。ただし、拡張機能をインストールする前に、linkerd-smi チャートがそれを取得できるように、CRD に次の注釈とタグを追加する必要があります。

 $ kubectl annotate -- crd / trafficsplits を上書きしますスプリットsmi スペック io \
メタヘルムsh / リリース- 名前= linkerd - smi \
meta.helm.sh/release-namespace=linkerd-smi
#smi リポジトリウェアハウスを追加
$ helm リポジトリl5d - smi を追加しますhttps://linkerd.github.io/linkerd-smi
$ helm アップグレード-- linkerd - smi -n インストールlinkerd - smi -- 名前空間l5d - smi / linkerd - smi を作成します
リリース「linkerd-smi」アップグレードされましヘルミングを楽しんでください
名前: linkerd - smi
最終デプロイ: 2022年9月11( 日) 14:54:02
名前空間: linkerd - smi
ステータス: 展開済み
改訂: 1
テストスイート: なし
注記:
Linkerd SMI 拡張機能正常にインストールされました🎉
$ kubectl get pods -n linkerd -smi 実行します。
名前準備完了ステータス再起動年齢
名前空間- メタデータ-- 1 - jnttx 0 / 1 完了0 17
smi - アダプタ- 5788 b875d4 - r4b7w 2 / 2 実行中6 ( 5 分53秒) 17

最後に、通常の CLI アップグレード手順を続行できますが、TrafficSplit CRD が削除されないように、linkerd upgrade --crds の出力を適用するときに --prune フラグを使用しないでください。

アップグレード

次に、linkerd アップグレード コマンドを使用してコントロール プレーンを直接アップグレードします。これにより、コントロール プレーンの既存の構成と mTLS がすべて保持されます。

 $ kubectl でcrd を取得します| grep リンク
サーバー認証 ポリシー リンクされました 2022-08-19 T04 : 06 : 33Z ...
サーバー ポリシー リンクされました 2022-08-19 T04 : 06 : 33Z ...
サービスプロファイル リンクされました イオ2022-08-19 T04 : 06 : 33Z
linkerd アップグレードします--crds | \
kubectl apply --prune -l linkerd を実行ます。 io / コントロールプレーン- ns = linkerd \
--prune - ホワイトリスト= apiextensions.k8s.io / v1 / カスタムリソース定義\
--prune - ホワイトリスト= split.smi-spec.io / v1alpha2 / トラフィックスプリット\
-f-
カスタムリソース定義api拡張機能k8sio / 認証ポリシーポリシーリンクされましたio 作成
カスタムリソース定義api拡張機能k8sio / httproutesポリシーリンクされましたio 作成
カスタムリソース定義api拡張機能k8sio / meshtlsauthenticationsポリシーリンクされましたio 作成
カスタムリソース定義api拡張機能k8sio / ネットワーク認証ポリシーリンクされましたio 作成
カスタムリソース定義api拡張機能k8sio / サーバー認証ポリシーリンクされましたio 設定済み
カスタムリソース定義api拡張機能k8sio / サーバーポリシーリンクされましたio 設定済み
カスタムリソース定義api拡張機能k8sio / サービスプロファイルリンクされましたio 設定済み
カスタムリソース定義api拡張機能k8sio / トラフィック分割スプリットsmi スペック io 設定済み

上記の更新コマンドでは --prune フラグを使用していることに注意してください。これにより、新しいバージョンには存在しない以前のバージョンの Linkerd リソースが削除されます。上記では、CRD リソースの新しいバージョンを更新しています。 Gateway API が導入されたため、4 つの新しい CRD が追加されたことがわかります。

 $ kubectl でcrd を取得します| grep リンク
承認ポリシー ポリシー リンクされました 2022-09-11 T02 : 56 : 13Z 2022-09-11 T02 : 56 : 13Z
httpルート ポリシー リンクされました 2022-09-11 T02 : 56 : 13Z 2022-09-11 T02 : 56 : 13Z
メッシュTLS認証 ポリシー リンクされました 2022-09-11 T02 : 56 : 14Z 2022-09-11 T02 : 56 : 14Z
ネットワーク認証 ポリシー リンクされました 2022-09-11 T02 : 56 : 14Z 2022-09-11 T02 : 56 : 14Z
サーバー認証 ポリシー リンクされました 2022-08-19 T04 : 06 : 33Z ...
サーバー ポリシー リンクされました 2022-08-19 T04 : 06 : 33Z ...
サービスプロファイル リンクされました イオ2022-08-19 T04 : 06 : 33Z

ただし、新しく追加された Gateway API 関連の CRD は、元の Kubernetes の下に定義されておらず、policy.linkerd.io グループの下にも定義されていることに注意してください。これは、Linkerd もこれらの CRD にいくつかの適応を行ったためです。

次に、次のコマンドを直接使用して、コントロール プレーン リソース オブジェクトを更新します。

 $ linkerd アップグレード| \
kubectl apply --prune -l linkerd を実行ます。 io / コントロールプレーンns = linkerd f -

次に、このコマンドを再度実行し、クラスター全体の特定のリソースが適切にプルーニングされるようにするために必要な --prune-whitelist フラグをいくつか追加します。

 $ linkerd アップグレード| kubectl apply --prune -l linkerd を実行ます。 io / コントロールプレーン- ns = linkerd \ 
--prune - ホワイトリスト= rbac.authorization.k8s.io / v1 / clusterrole \
--prune - ホワイトリスト= rbac.authorization.k8s.io / v1 / clusterrolebinding \
--prune - ホワイトリスト= apiregistration.k8s.io / v1 / apiservice - f-

アップグレード プロセスが完了したら、チェック コマンドを実行して、すべてがうまくいったかどうかを確認することもできます。

 $ linkerd チェック

このコマンドは、コントロール プレーンに対して一連のチェックを実行し、コントロール プレーンが適切に機能していることを確認します。

ここで、Linkerd のバージョンを再度確認すると、通常のサーバー バージョンも更新されています。

 $ linkerd バージョン
クライアントバージョン: 安定版- 2.12.0
サーバーバージョン: 安定版- 2.12.0

その後、データ プレーンをアップグレードできます。これを行う最も簡単な方法は、サービス上でローリング デプロイメントを実行し、プロキシ インジェクターが最新バージョンのプロキシを利用可能になったときに挿入できるようにすることです。

 $ kubectl -n < 名前空間> ロールアウト再起動デプロイ

一般的に、コントロール プレーンの安定バージョンはデータ プレーンの以前の安定バージョンと互換性があるため、コントロール プレーンのアップグレード後はいつでもデータ プレーンをアップグレードできますが、1 つの安定バージョンのギャップを超えることは推奨されません。

更新が完了したら、チェック コマンドを使用してデータ プレーンのステータスを確認できます。

 $ linkerd チェック--proxy
# ......
linkerd - データ- プレーン
------------------
データプレーン名前空間が存在する
データプレーンプロキシ準備完了
データプレーン最新です
一部のプロキシ現在のバージョン実行していません:
* 絵文字- 696 d9d8f95-5 vn9w ( 安定版- 2.11.1 )
* 投票- ボット- 646 b9fd6fd - 8 xj2j ( 安定版- 2.11.1 )
* 投票- ff4c54b8d - xhjv7 ( 安定版- 2.11.1 )
* ウェブ- 5f 86686 c4d - 58 p7k ( 安定版- 2.11.1 )
* web - svc - 2 - f9d77474f - vxlrh ( 安定版- 2.11.1 )
* イングレス- nginx - コントローラー- f56c7f6fd - rxhrs ( 安定版- 2.11.1 )
ヒントについては、 https://linkerd.io/2.12/checks/#l5d-data-plane-version を参照してください
データプレーンCLI のバージョンが一致
emoji - 696 d9d8f95 - 5 vn9w安定版- 2.11 .1 で実行されていますが、 cli は安定版- 2.12 .0 で実行されています
ヒントについては、 https://linkerd.io/2.12/checks/#l5d-data-plane-cli-version を参照してください
データプレーンポッドラベル正しく構成されている
データプレーンサービスラベルが正しく構成されている
データプレーンサービスアノテーション正しく構成されている
不透明なポートは適切に注釈が付けられている

Linkerd 拡張機能のチェック
=========================

- smi 拡張チェックを実行中

このコマンドは、一連のチェックを通じてデータ プレーンが適切に実行されていることを確認し、古いバージョンのプロキシをまだ実行しているポッドを一覧表示します。その後、実際の状況に応じて対応するポッドをアップグレードできます。

Linkerd Viz 拡張機能

注目すべきもう 1 つの点は、viz プラグインです。最新バージョンでは Grafana が組み込まれなくなったため、ここではまずプラグインを直接アンインストールし (プラグインはグリッドのコア機能に影響を与えません)、その後最新バージョンを再インストールします。

 $ linkerd viz をインストール| kubectl 削除-f -

アンインストール後、再インストールしてください。新しいバージョンには Grafana が組み込まれていないため、再インストール時に --set grafana.url を介して外部 Grafana アドレスを指定できます (クラスター外部のアドレスの場合は、grafana.externalUrl パラメータを介して指定できます)。外部の Prometheus を使用することもできます。

 $ linkerd viz install -- set grafanaurl = grafana : 3000prometheusUrl = http : //prometheus.kube-mon.svc.cluster.local:9090,prometheus.enabled=false | kubectl を適用 -f -

再インストール後、次のポッド リストを確認します。

 $ kubectl get pods - n linkerd - viz
名前準備完了ステータス再起動年齢
メトリクス- api - 674 bf48d7f - kzr5b 2 / 2 実行中0 17 m
タップ- 67 d6d8ff4d - q7nqn 2 / 2 ランニング0 5 m21s
タップ- インジェクター- 7 c565f754 - jgvc5 2 / 2 実行中0 5 m20s
ウェブ- 87 b958bcf - d5pfp 2 / 2 実行中0 5 分20秒

外部の Prometheus に接続されており、新しいバージョンには Grafana が組み込まれていないため、Grafana と Prometheus が使用できなくなっていることがわかります。上記で指定した Grafana アドレスは viz と同じ名前空間にあるため、ここで手動でインストールするだけです。

1 つの Grafana インスタンスが複数の Linkerd を指している場合は、各 Linkerd インスタンスの grafana.uidPrefix 設定で構成できる UID の異なるプレフィックスによってダッシュボードを分離できます。

ここでは、以下に示すように、Helm Chart を直接使用して値ファイルをインストールおよびカスタマイズします。

 ポッド注釈:
linkerd.io/inject:enabled
grafana.ini :
サーバー:
root_url : "%(プロトコル)s://%(ドメイン)s:/grafana/"
認証:
ログインフォームを無効にする: true
認証匿名
有効: true
org_role : 編集者
認証基本
有効: false
分析:
更新の確認: false
パネル:
無効化_sanitize_html : 有効
ログ:
モード: コンソール
ログコンソール:
フォーマット: テキスト
レベル: 情報
データソース:
データソースyaml :
apiバージョン: 1
データソース:
- 名前: プロメテウス
タイプ: プロメテウス
アクセス: プロキシ
組織ID : 1
URL : http : //prometheus.kube-mon.svc.cluster.local:9090
isDefault :
jsonデータ:
時間間隔: "5秒"
編集可能: true
ダッシュボードプロバイダー:
ダッシュボードプロバイダーyaml :
apiバージョン: 1
プロバイダー:
- 名前: "デフォルト"
組織ID : 1
フォルダ: ""
タイプ: ファイル
削除を無効にする: false
編集可能: true
オプション:
パス: / var / lib / grafana / dashboards / default
ダッシュボード:
デフォルト
# これらのチャートはすべてhttps://grafana.com/grafana/dashboards/{id } ホストされています
トップライン:
ネットID : 15474
改訂: 3
データソース: プロメテウス
健康
ネットID : 15486
改訂: 2
データソース: プロメテウス
Kubernetes : :
ネットID : 15479
改訂: 2
データソース: プロメテウス
名前空間:
ネットID : 15478
改訂: 2
データソース: プロメテウス
展開:
ネットID : 15475
改訂: 5
データソース: プロメテウス
ポッド:
ネットID : 15477
改訂: 2
データソース: プロメテウス
サービス
ネットID : 15480
改訂: 2
データソース: プロメテウス
ルート:
ネットID : 15481
改訂: 2
データソース: プロメテウス
権限
ネットID : 15482
改訂: 2
データソース: プロメテウス
cronジョブ:
ネットID : 15483
改訂: 2
データソース: プロメテウス
仕事
ネットID : 15487
改訂: 2
データソース: プロメテウス
デーモンセット:
ネットID : 15484
改訂: 2
データソース: プロメテウス
レプリカセット:
ネットID : 15491
改訂: 2
データソース: プロメテウス
ステートフルセット:
ネットID : 15493
改訂: 2
データソース: プロメテウス
レプリケーションコントローラ:
ネットID : 15492
改訂: 2
データソース: プロメテウス
プロメテウス:
ネットID : 15489
改訂: 2
データソース: プロメテウス
プロメテウス- ベンチマーク:
ネットID : 15490
改訂: 2
データソース: プロメテウス
マルチクラスター:
ネットID : 15488
改訂: 2
データソース: プロメテウス

上記の値ファイルでは、Linkerd のプロキシを挿入するために linkerd.io/inject: enabled アノテーションを挿入し、Prometheus データ ソース アドレスも構成する必要があります。

 $ helm リポジトリ追加grafana https://grafana.github.io/helm-charts
$ helm アップグレード-- grafana -n linkerd -viz grafana / grafana -f values ​​.yaml インストールます

すでに外部 Grafana がある場合は、インストール時に grafana.externalUrl を介して直接指定できます。

 $ linkerd viz install -- set grafana外部 URL = http://192.168.0.106:30403、prometheusUrl=http://prometheus.kube-mon.svc.cluster.local:9090、prometheus.enabled=false | kubectl を適用 -f -

アップデート後、Linkerd 関連のダッシュボードを外部 Grafana にインポートすることを忘れないでください。これは、Grafana の公式 Web サイト https://grafana.com/orgs/linkerd から入手できます。

たとえば、デプロイメント ダッシュボードをインポートする場合、ID 15475 をインポートするか、JSON ファイルをダウンロードしてインポート用にアップロードすることができます。

インポート後、Viz のダッシュボードを再度確認します。

同様に、ページ上の Grafana アイコンをクリックすると、Grafana ダッシュボード ページに直接ジャンプします。

この時点で、Linkerd のアップグレードは完了です。

<<:  Linkerd と Ingress-Nginx の組み合わせとサービスへのアクセス制限

>>:  クラウドコンピューティングでマルチテナントを実装する方法

推薦する

cloudshards-$7/Kvm/320m メモリ/500g ハードディスク/2T トラフィック/G ポート

Cloudshards はいくつかの強力な VPS プロモーションをリリースしており、きっとお好みの...

個人ウェブサイトの包囲網を突破するための4つの提案

多くのウェブマスターは、個人ウェブサイトが包囲網を突破して発展することがいかに難しいかを語っています...

123systems - 3 年間 $34/2IP/3G メモリ/75g ハード ドライブ/3T トラフィック/4 コンピュータ ルーム

コロクロッシングが買収したブランドである123ystemsは、長い間登場していません。ホストキャット...

「最初から課金」が産業現場の持続的発展と収益性の鍵

セグメント化された業界ウェブサイトは、個人がウェブサイトを構築する方向性の 1 つでした。大規模で包...

Siteground: 19周年、24%割引、年間23.88ドル、Googleクラウドで稼働する仮想ホスティング

Siteground は 19 周年を記念して特別プロモーションを開始し、クラウド ホスティングを ...

IDC: アリババクラウド、中国のビデオクラウド市場で4年連続1位に

8月9日、大手IT市場調査・コンサルティング会社IDCは先日、「中国ビデオクラウド市場追跡、2021...

百度のアルゴリズムバージョン8.22は本日正午に発効予定

Baidu の 6.22 および 6.28 アルゴリズム アップグレードの結果、多数の Web サイ...

ウェブサイトのデータ分析: 目にするものは思ったものとは違うかもしれない

ウェブサイトのデータは、すべての SEO ウェブマスターが最も関心を持つデータです。私たちは、検索エ...

Weiboマーケティングとは何ですか?特徴は何ですか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス新しいメディアの急速な発...

Vultr VPS: トップアップで 100 ドル無料、Windows、15 のデータ センター、時間単位での支払い

Vultr は長い間、大きなプロモーションを行っていませんでした。2018 年 7 月 10 日、V...

成功する個人ブログを作成する方法の詳細について説明します

個人ブログは、個人の表示プラットフォームです。ポイントツーポイント インターネットの発展に伴い、独自...

HUYAの急速な海外進出の秘密

[51CTO.com からのオリジナル記事] Huya は、ゲームライブストリーミングを主力事業とす...

APIServer ソースコード分析ルーティング登録

Kube APIServer と go-restful のエントリ ポイントの基本を理解したので、A...

LightCloud - 国慶節 12% オフ/高防御 VPS+CN2 ネットワーク+ゴールデン シールド ファイアウォール「言葉では言い表せない」

LightCloudは現在、フランス、カナダ、韓国、香港のデータセンターでホスティングサービスを運営...

PinduoduoはTaobaoトラフィックの上流になりつつある

私のような老人にとって、 Pinduoduo を理解するのはまだ少し難しいですが、業界では、Alib...