K8s の使用に問題がありますか? Istio がお手伝いします!

K8s の使用に問題がありますか? Istio がお手伝いします!

コンテナ、特に Kubernetes を扱っている場合は、おそらく Istio について聞いたことがあるでしょう。初心者のために説明すると、Istio は Kubernetes 用のサービス メッシュです。いわゆるサービス メッシュは、サービス トラフィックを動的に管理し、安全に管理できるネットワーク層です。

Istio を最大限に活用する方法は、1 つのブログ投稿の範囲を超えています。したがって、この記事ではその機能のいくつかを紹介し、さらに重要なことに、この記事を通じていくつかの実用的な問題の解決を自動化する方法をいくつか学ぶことができます。

Istio を使用すると、一連のカスタム Kubernetes リソースを使用してネットワーク トラフィックを管理でき、サービス間およびクラスター内外のネットワーク トラフィックを保護および暗号化できます。 Kubernetes API と完全に統合されているため、Istio 設定は他の Kubernetes 構成とまったく同じ方法で定義および管理できます。

長所と短所を比較検討して選択してください

Istio を使い始める場合は、まずその理由を自問する必要があります。 Istio は、カナリア リリースなどの非常に価値のある機能を提供しますが、複雑さを増さずに使用することはできません。それを学ぶには、ある程度の時間を投資する必要もあります。とはいえ、状況に応じて、Istio の機能を独自のクラスターに慎重かつ段階的に導入することができます (また、そうすべきです)。

新しい環境をゼロから構築し、長所と短所を比較検討した上で Istio の導入を決定した場合は、必ず最初から厳密な相互 TLS を設定して、その強力な機能を活用してください。具体的な操作については、

これらすべてを価値あるものにし、コスト効率を高めるには、実際のアプリケーションのコンテキストで Istio について考える必要がありますが、簡単な免責事項なしにそれを行わない方がよいでしょう。少数のサービスのみを管理する必要があり、それらが単一のクラスター内に配置されている場合、Istio を導入するコスト効率は比較的低くなります。

この記事のコード例は、問題を完全に解決するのに役立つとは限りませんが、すべてのコードと使用方法の詳細な手順が必要な場合は、GitLabで見つけることができます。

以下では、クラウド ネイティブの導入時に遭遇する可能性のある 2 つの一般的な問題と、Istio を使用してそれらの問題を解決する方法について説明します。

問題1: テストを信頼できない

テスト範囲がアプリケーションに加えた変更を完全にカバーしていない場合、すぐに新しいテスト ラウンドに移行できますが、アプリケーションが正しく機能しない可能性があります。

理想的には、すべてのコードが徹底的にテストされていることを確認する必要があります。そうしないと、アプリケーションに機能が追加されません。しかし現実は常に厳しいものです。 DDLに追われることが多いです。テストを作成または更新する前に、関数をプロジェクトにアップロードする必要がある場合があります。

解決策: 速度を落とす

では、コードに潜むバグによって大多数のユーザーが影響を受けないようにしながら、変更を加えて新しい機能を展開するにはどうすればよいでしょうか?答えは、まず最小限のユーザーに新しいバージョンを展開することで、これらの小さな問題の影響を最小限に抑えることです。

変更が期待どおりに機能した場合は、新しいバージョンを使用するユーザーの割合を徐々に増やすことができます。メトリックに問題が発生した場合、変更を簡単にロールバックして再試行できます。

Istio なしで Kubernetes 上でカナリアデプロイメントを実行することは可能ですか?もちろんですが、プロセスを自動化したい場合は、Web サーバー コードとカスタム自動化スクリプトに完全に集中する必要があります。この動作モードは費用対効果が高くありません。

Istio には非常に優れたトラフィック分散ソリューションが備わっており、これを使用して適切なクライアントに適切なバージョンを適切なタイミングで提供することができ、調整する必要があるのは 1 つまたは 2 つのパラメータだけです。

これを実現するには、Ingress ゲートウェイ、仮想サービス、および宛先ルールを設定する必要があります。これは通常のデプロイメントとサービスの上に配置され、トラフィックを分散します。

  1. APIバージョン: networking.istio.io/v1alpha3
  2. 種類: ゲートウェイ
  3. メタデータ:
  4. 名前: http-gateway
  5. 仕様:
  6. セレクタ:
  7. istio: イングレスゲートウェイ
  8. サーバー:
  9. - ポート:
  10. 番号: 80
  11. 名前: http
  12. プロトコル: HTTP
  13. ホス
  14. ts:
  15. - 「*」  
  16. APIバージョン: networking.istio.io/v1alpha3
  17. 種類: 仮想サービス
  18. メタデータ:
  19. 名前: my-app
  20. 仕様:
  21. ホスト:
  22. - 「*」  
  23. ゲートウェイ:
  24. -http ゲートウェイ
  25. http:
  26. - マッチ:
  27. - ウリ:
  28. プレフィックス: "/my-app"  
  29. リライト:
  30. uri: "/"  
  31. ルート:
  32. - 行き先:
  33. ホスト: my-app
  34. サブセット: v1
  35. ポート:
  36. 番号: 80
  37. 重量: 90
  38. - 行き先:
  39. ホスト: my-app
  40. サブセット: v2
  41. ポート:
  42. 番号: 80
  43. 重量: 10
  44. APIバージョン: networking.istio.io/v1alpha3
  45. 種類: 宛先ルール
  46. メタデータ:
  47. 名前: my-app
  48. 仕様:
  49. ホスト: my-app
  50. サブセット:
  51. -名前: v1
  52. ラベル:
  53. バージョン: v1.0.0
  54. -名前: v2
  55. ラベル:
  56. バージョン: v2.0.0

仮想サービスの Weight フィールドからわかるように、Istio は指定された値に基づいてアプリケーションの 2 つのバージョン間でトラフィックを分散します。これらの値の合計は 100% である必要があります。そうでない場合、API は定義の適用を拒否します。

その後、あなた (または理想的には、継続的インテグレーション/継続的デリバリー パイプラインの 1 つ以上の手動ステップ) は、すべてのリクエストが新しいバージョンで満たされ、以前のバージョンをメンテナンスから削除できるようになるまで、重みを調整して新しいバージョンをより多くのユーザーに宣伝します。

また、Istio の障害注入機能を使用して実際のトラフィックのネットワーク停止やパフォーマンス低下をシミュレートすることで、Istio を統合テスト戦略に統合することもできます。

本番環境でテストを行うことに不安を感じるなら、それは間違ったやり方です。たとえば、仮想サービス仕様に次のスニペットを追加して混乱を招き、Istio を使用してそのような混乱を解決する方法に関する記事を探してみてください。

  1. 仕様:
  2. ホスト:
  3. - 私のアプリ
  4. http:
  5. - 故障:
  6. 遅れ:
  7. 固定遅延: 7秒
  8. パーセント: 100
  9. ルート:
  10. - 行き先:
  11. ホスト: 評価
  12. サブセット: v2

問題2: マーケティング戦略ではリリースバージョンを決定できない

多くの場合、企業では実際のユーザーに対してアプリケーションの複数のバージョンをテストする必要があります。しかし、どのマーケティング戦略が最高のコンバージョン率につながるのか、またはどのデザイン選択が最高の顧客維持率につながるのかを判断するのは不可能な場合があります。

Kubernetes を使用すると、トラフィックを 2 つのバージョンに分割できますが、この演習から貴重な洞察を得るには、関連する情報を取得し、技術に詳しくない同僚が理解できる方法で処理するための一連のカスタム コードが再度必要になります。

ソリューション: Istio を使用した A/B テスト

Istio のトラフィック分散ルールはこの問題を再び解決でき、Prometheus および Grafana との緊密な統合により直感的な A/B テスト結果を得ることができます。一般に、受信パケットの内容の一部に基づいて、どのユーザーがアプリケーションのバージョンを取得するかを決定する方法はほぼ無限にあります。

この例では、User-Agent フィールドを使用して、異なるブラウザに異なるバージョンを提供します。

  1. APIバージョン: networking.istio.io/v1alpha3
  2. 種類: 仮想サービス
  3. メタデータ:
  4. 名前: my-app
  5. 仕様:
  6. ホスト:
  7. - 「*」  
  8. ゲートウェイ:
  9. -http ゲートウェイ
  10. http:
  11. - マッチ:
  12. - ヘッダー:
  13. ユーザーエージェント:
  14. 正規表現: 「.*Chrome.*」  
  15. ウリ:
  16. プレフィックス: "/my-app"  
  17. リライト:
  18. uri: "/"  
  19. ルート:
  20. - 行き先:
  21. ホスト: my-app
  22. サブセット: v1
  23. ポート:
  24. 番号: 80
  25. - マッチ:
  26. - ヘッダー:
  27. ユーザーエージェント:
  28. 正規表現: 「.*Mozilla.*」  
  29. ウリ:
  30. プレフィックス: "/my-app"  
  31. リライト:
  32. uri: "/"  
  33. ルート:
  34. - 行き先:
  35. ホスト: my-app
  36. サブセット: v2
  37. ポート:
  38. 番号: 80

上記のコードからわかるように、Firefox を使用するユーザーはアプリケーションのバージョン 1 を取得し、Chrome ユーザーはバージョン 2 を取得します。ブラウザの「User-Agent」フィールドに「mozilla」または「chrome」が含まれていない場合、どちらのバージョンも取得されません。

他のクライアントにサービスを提供するには、デフォルト ルートを追加する必要がありますが、これは演習として残しておきます。 (ヘイヘイ)

別のブラウザをインストールせずに試してみたいだけの場合は、ヘッダー フラグを指定した curl を使用して、任意のブラウザを装うことができます。次に例を示します。

  1. curl /my-app -H "ユーザーエージェント: Chrome"  

user-agent の値を変更することで、コマンドラインからさまざまなルートをすべてテストできます。

要約する

上記の 2 つの状況から、Istio の強力な機能を垣間見ることができるでしょう。前述のように、Istio がなくてもカナリア デプロイメントと A/B テストを実行することはできますが、トラフィック分散を自分で実装する必要があります。ただし、これにより開発と展開の複雑さが大幅に増し、コスト効率の悪いオプションになります。

この投稿で Istio の実際の動作について十分に理解していただけたと思います。ぜひご自身で試してみるのが待ちきれません。 Istio について詳しく知りたい場合は、役立つ情報が多数掲載されている公式 Web サイトをご覧ください。

Rancher 2.3 Preview2 バージョンが Istio のサポートを開始したことは注目に値します。ユーザーは UI インターフェースで直接 Istio を起動し、各名前空間に自動サイドカーを挿入できます。さらに、Rancher は Istio のインストールと構成を簡素化し、トラフィックとテレメトリの視覚化のための Kiali サポートを備えた組み込みダッシュボードを備え、トレースには Jaeger を使用し、独自の Prometheus と Grafana (高度な監視用のインスタンスとは別) も備えています。これらすべてにより、Istio の導入と管理が簡単かつ迅速になります。

リリースノートとインストール手順は GitHub で入手できます。

<<:  ディプテクノロジーは、デジタル技術とビジネスの統合を全面的に推進するためにシリーズAで3,500万ドルの資金調達を実施

>>:  ハイブリッド クラウドが「新しい IT 標準」である 5 つの理由

推薦する

Baidu 百科事典による検索エンジン最適化をどのように見ていますか?

百度百科事典は19日午後、最新の統計データを発表した。それによると、2012年、百度百科事典の総項目...

prometeus-アジアとインドでのVPS補充/XEN/SSD

良いニュースです。Prometeus のインド データ センターの VPS が再入荷しました。最初の...

Red Hat の Zhang Xianmin: オープンハイブリッドクラウドの構築

2012 年、Red Hat はオープンソースの Linux ソフトウェアから始まり、年間収益が 1...

マイクロノード - ダラス/KVM/2.8USD/512MB RAM/30GB HDD/500GB フロー

micronodes.net は 2017 年に設立された新しいブランドです。SpartanHost...

racknerd: イースター、VPS は年間 12.5 ドルから、KVM/1G メモリ/20g ハードディスク/3T トラフィック/ロサンゼルス最適化回線

racknerd では「イースターセール」のプロモーションを 2 回実施しており、2 年分まとめて購...

第14回51CTO中国企業年次選考の結果が出ました!

【原文は51CTO.comより】2020年1月6日、51CTOが主催した「IT印象◆ビジネスモデルの...

Google ダンス観察

Google がますます保守的になっているので、SEO について心配しなければなりません。なぜそう言...

4種類の顧客からのSEO注文は「失う」べきではない 4種類の顧客は「受け入れる」べきではない(I)

私はこの業界に2年間います。この分野ですでに専門家であるとは言えませんが、いくつかの側面ではまだ独自...

ソフトウェアダウンロードサイトのいくつかの収益モデルについて話す

みなさんこんにちは。2006 年と 2007 年に、<年収 2 万元で Web マスターの仲間...

Baiduがオリジナルコンテンツと転載コンテンツを区別する方法を分析

SEO にとって、ソフト記事は非常に効果的なプロモーション方法であるだけでなく、外部リンクを増やすた...

ハイブリッドクラウドを使用する際に考慮すべき3つのこと

パブリック クラウドに一夜にして移行することはできません。そのため、ハイブリッド クラウドは企業にと...

電子商取引の事例:ニーズから生まれた電子商取引の代理店業務

邵斌潔氏(左から1人目)の電子商取引代理運営会社は、写真撮影から陳列、顧客サービス、注文受付、倉庫保...

SimpleNode - $48/年/1.5GB メモリ/40GB ハードドライブ/2TB トラフィック/G ポート/ダラス

SimpleNode.de は 2009 年に設立されました。現在の VPS サーバーは Incer...

hostkvm: 東京のVPSの簡単なレビュー、実際のネットワークデータを共有

Hostcatは、日本の大阪データセンターにあるhostkvmのVPSの評価データを公開しました。 ...

Pacificrack: 米国のクラスター VPS、月額 5.2 ドルから、複数の C セグメントがランダムに割り当てられ、Windows をサポート

Pacificrack の米国クラスター VPS は、今のところ市場で最も安価かもしれません。 Pa...