Upgrade to Pro — share decks privately, control downloads, hide ads and more …

金融システムをモダナイズするためのAmazon Elastic Kubernetes Serv...

金融システムをモダナイズするためのAmazon Elastic Kubernetes Service(EKS)ノウハウ大全

高棹大樹

March 17, 2025
Tweet

More Decks by 高棹大樹

Other Decks in Technology

Transcript

  1. 金融システムをモダナイズするための Amazon Elastic Kubernetes Service(EKS)ノウハウ大全 TECH PLAY NRI Tech Talks#3

    2025年3月17日 株式会社 野村総合研究所 マルチクラウドインテグレーション事業本部 金融基盤サービス部 エキスパートアーキテクト 高棹 大樹
  2. 1 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    高棹 大樹 – Daiki Takasao NRI 金融基盤サービス部 • Elastic Kubernetes Service(EKS)を用いた金融機関 様向けマイクロサービス共通基盤 のインフラ担当 主な仕事 趣味 最近の困り事 • キャンプ • 筋トレ • 子供と遊ぶ(相手をしてくれる内に。。) • 飼っている猫が懐いてくれない
  3. 2 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    NRIの会社紹介 使命 創発する社会 私たちの価値観 企業理念 社会に対して 新しい社会のパラダイムを洞察し、その実現を担う お客様に対して お客様の信頼を得て、お客様とともに栄える 夢と可能性に満ち、豊かさを実感する、 活力ある社会 人々の英知がつながり、 環境にやさしい持続可能な社会 強くてしなやかな、安全で安心に満ちた社会 先見性と緻密さで、期待を超える 多彩な個が互いに尊重し、志をひとつにする 情熱と誇りを胸に、あくなき挑戦を続ける
  4. 3 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    NRIグループ4つの事業 NRIの会社紹介 コンサルティング CONSULTING 金融ソリューション FINANCIAL IT SOLUTIONS 1965年の創業以来、シンクタンクとしての深い知見と先見の明を活かし、官と民のさまざまな分野で戦略 策定・政策立案を支援してきました。また、政策・産業・事業・テクノロジーへの深い理解とお客様との対話 を通じ、課題解決に向けた実行可能な施策を提案し、伴走しています。「VUCA」の時代、ビジネスを次の ステージへと導くには、先見性に裏付けられたマネジメントコンサルティングと、デジタルトランスフォーメーション や事業革新を支援するシステムコンサルティングの先進性や実行力が不可欠です。これらは、お客様の 持続可能な成功を支え、未来へと導くための私たちならではのコミットメントです。未来を見据え、今を 変えることで、私たちは最良のパートナーであり続けることを目指します。 NRIグループは50年にわたり金融機関における情報システムの「所有から利用へ」の流れを牽引してきました。 金融ビジネスを取り巻く環境変化を敏感に察知する研究員やコンサルタント、ITソリューションサービスを 提供するビジネスアナリストやデジタル人材の連携によって次世代ソリューションを生み出し続け、金融機関 の事業継続を多方面から支えています。近年では、金融機関や政策当局、異業種プレーヤーなどとの価値 共創により、金融機能の変革に取り組んでいます。金融は、社会の重要インフラです。進化し続けるデジ タル技術との相性を常に考えながら、安定かつ先進的な社会インフラを実現し、社会課題に果敢にチャ レンジしていきます。
  5. 4 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    NRIグループ4つの事業 NRIの会社紹介 産業ITソリューション INDUSTRIAL IT SOLUTIONS IT基盤サービス IT PLATFORM SERVICES 産業分野の業界トップ企業のビジネスパートナーとして、コンサルティングからシステム開発や運用まで、一貫 したサービスを提供しています。コンサルタントとエンジニアが共同でお客様のビジネス環境やデータを分析 しながら、最適なITソリューションを提供しています。また、コンサルティング部門から運用部門まで、NRI グループのリソースをインテグレーションし、お客様のデジタル戦略を柔軟かつスピーディーに実現します。長年 にわたってミッションクリティカルなシステムを構築・運用してきた経験と実績で、これからもお客様の事業イン フラとしてのシステム基盤を支えていきます。 事業活動の変化やIT技術の進化とともに、システムがクラウド化・巨大化・複雑化する中で、その土台と なるIT基盤は、ますます重要になっています。NRIグループは先進的な技術を見通し、戦略的にサービスや ソリューションに取り込み、お客様の成長や変革の実現をサポートします。マルチクラウドを含むシステム全体 を運営するマネージドサービスやお客様の働く環境を創り出すデジタルワークプレイス事業などを展開して います。また、先進技術の調査・研究も積極的に実施しています。さらに、お客様が直面するセキュリティ 課題の解決や総合的なセキュリティレベルの向上を支援します。 NRIグループはコンサルティングやさまざまなITソリューションの提供を通じて、 社会や産業を確かな明日へ導くとともに、世界中のお客様と新しい価値を共創しています。
  6. 5 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    近年、金融システムのモダナイズ案件が増えています オンプレ→クラウドへのリフトは一巡 クラウドのポテンシャルを最大限享受するフェーズへ 従来アーキテクチャの課題を解消し、 よりアジリティの高いシステム開発を実現 問題が発生すると 由々しき事態なるのが金融システム
  7. 6 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    金融システムで求められる高度な要求 ①高度なセキュリティ ②高度な信頼性 エンドユーザ様のお金を扱うシステムなので、 守れない場合深刻な問題に繋がる
  8. 7 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ◼ AWS公開の金融システムで求められるセキュリティと信頼性に関するベストプラクティス集 ⚫ 2022/10/3に初版であるv1.0.0、2024/11/4にv1.5.0がリリース ⚫ https://github.com/aws-samples/baseline-environment-on-aws-for-financial-services-institute ◼ Elastic Container Service (ECS)の例はあるものの、EKSを扱ったものは現状無い。 AWS 金融リファレンスアーキテクチャ日本版 https://github.com/aws-samples/baseline-environment-on-aws-for-financial-services-institute より引用
  9. 8 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ◼運用コストと利用可能な機能の幅、相互運用性を考慮して選択する ECS or EKS ? ECS (Elastic Container Service) EKS (Elastic Kubernetes Service) 利用可能な機能の幅 △ AWSが提供しているサービスの機能のみ 利用可能 AWS提供サービスに加えてKubernetesや その上で稼動するクラウドネイティブOSSを利用可能 マルチクラウド、オンプレミス との相互運用性 △ ECSはAWS独自サービス Kubernetes APIリソースは マルチクラウド、オンプレミスで使用可能 運用コスト クラスタのバージョンアップは実施不要 △ Kubernetesのバージョンリリースに追従して定期的に クラスタのバージョンアップを行う必要がある
  10. 9 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    金融システムに求められる高度な要求をEKSで満たすためには? 自身の経験から考える高度なセキュリティ、信頼性を担保する インフラ設計のベストプラクティスを一部紹介します! KubernetesとAWS両方のサービス・機能を 有効活用する必要あり! これまでEKSを運用する上で 実際に直面した問題と解決策についてもお話しします!!
  11. 10 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ◼ 話すこと ⚫ 金融システムを載せる事ができるEKS中心のITインフラを構築するために有用なノウハウ ⚫ EKSを複数年運用した中で直面した問題とその解決方法 ◼ 話さないこと ⚫ EKSを用いて構築したITインフラ上で稼動するアプリケーションを開発を行う上でのノウハウ ⚫ Kubernetesの基礎知識(Pod,Deployment,Serviceとは? Etc..) ⚫ AWSの基礎知識(EC2,lAMとは? Etc..) ⚫ Kubernetes、EKSに関連しないITインフラ設計ノウハウ ◼ 注意事項 ⚫ あくまで高度なセキュリティ、信頼性を獲得するための一例を示すものであり、獲得するための対応方法が網羅されている訳 では無い点ご了承ください ⚫ 金融システムのITインフラを設計する上で必要な考慮点・設計ポイントが網羅されている訳では無い点ご了承ください 話すこと・話さないこと・注意事項
  12. 11 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ◼ AWS上でAmazon Elastic Kubernetes Service (Amazon EKS)を利用 ◼ FargateではなくEC2でワーカーノードを稼動 ◼ 個別のNamespaceが割り当てられた複数システムが稼動 ◼ AuroraやS3、SQS等のAWSリソースにアプリケーションPodからアクセスする 前提となるインフラ構成概要 ワーカーノード(EC2) Amazon Elastic Kubernetes Service (Amazon EKS) Aシステム用 Namespace Bシステム用 Namespace Aシステム用 S3バケット Aシステム用 SQSキュー Bシステム用 S3バケット Bシステム用 SQSキュー
  13. 12 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ◼2024年11月28、29日に開催されたCloudNative Days Winter 2024での登壇内容 「レガシーな金融システムをKubernetesを使ってクラウドネイティブ化するためのノウハウ大全」 から抜粋したものです ◼登壇のアーカイブ動画、登壇スライドは以下のQAコードからアクセスできます 本日お話しするインフラ設計のベストプラクティスについて アーカイブ動画 スライド
  14. 13 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    アジェンダ 高度なセキュリティをどの様に実現するか? 01 高度な信頼性をどの様に実現するか? 02 EKS運用で直面した問題とその解決策 03
  15. 14 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    Copyright (C) Nomura Research Institute, Ltd. All rights reserved. 14 1. 高度なセキュリティをどの様に実現するか?
  16. 15 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    EKSクラスタ コントロールプレーン ⑤EKSクラスタのセキュリティ対策 ワーカーノード ④ワーカーノードのセキュリティ対策 Aシステム用 Namespace ③Namespace間のセキュリティ対策 Bシステム用 Namespace 各レイヤでのセキュリティ対策 1. 高度なセキュリティをどの様に実現するか? ①コンテナのセキュリティ対策 コンテナ ②コンテナ間のセキュリティ対策 コンテナ
  17. 16 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ①コンテナのセキュリティ対策 外部シークレットストアの利用 1. 高度なセキュリティをどの様に実現するか? ◼ K8sのSecretオブジェクト内のシークレット情報はBase64エンコーディングで保存される ◼ そのため、SecretオブジェクトのマニフェストファイルをGithub等のリポジトリで管理してしまうと、そのマニフェストが漏 洩した際に致命的なセキュリティインシデントになる ⚫ マニフェストが漏洩してしまった場合、base64デコードで簡単にシークレット情報を見れてしまうため apiVersion: v1 kind: Secret metadata: name: sample-secret type: Opaque data: password: UEBzc3dvcmQK # "P@ssword" をbase64エンコード Secretのマニフェストファイル リポジトリ
  18. 17 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ①コンテナのセキュリティ対策 外部シークレットストアの利用 1. 高度なセキュリティをどの様に実現するか? ◼ Secrets Store CSI Driverを使ってシークレットをEKSクラスタ外部のシークレットストアで管理する ◼ AWS Secrets and Configuration Provider (ASCP)でAWS Secret Managerで管理可能 EKSクラスタ Aシステム用 Namespace SecretProviderClass ※Gitリポジトリ管理可能 シークレット1 シークレット2 ※自動生成 Key1 Key2 環境変数or Volume としてアクセス Secrets Store CSI Driver AWS Secrets Manager シークレットの値 シークレット1 シークレットの値 シークレット2 ASCP 紐付け設定 紐付け設定
  19. 18 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ②コンテナ間のセキュリティ対策 通信の暗号化 1. 高度なセキュリティをどの様に実現するか? ◼ Pod間の通信はワーカーノードを跨ぐ事もある ◼ 1つの処理を複数Podで連携して行うマイクロサービスアーキテクチャは、1つのPodで処理が完結するモノリスアーキテクチャと比較 して通信傍受のリスクが大きい EKSワーカーノード EKSワーカーノード サービス1 サービス2 サービス3 ワーカーノードを跨いで Pod間の通信が行われる
  20. 19 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ②コンテナ間のセキュリティ対策 通信の暗号化 1. 高度なセキュリティをどの様に実現するか? ◼ 通信傍受の対策として、Pod間通信を全て暗号化させる事が有効 ◼ 稼動させるPodが多くなるに従い、個別の暗号化鍵管理はどんどん大変になる ◼ Istio, Cilium, Linkerd等のサービスメッシュを導入する事でPod個別の鍵管理が不要な暗号化(mTLS)が可能 EKSワーカーノード EKSワーカーノード アプリ コンテナ サービスメッシュコンテナ (サイドカー) アプリ コンテナ サービスメッシュコンテナ (サイドカー) アプリ コンテナ サービスメッシュコンテナ (サイドカー) mTLS通信 mTLS通信 サービスメッシュ コントロールプレーン 暗号化鍵
  21. 20 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ③Namespace間のセキュリティ対策 K8s/AWSリソースのアクセス制御 1. 高度なセキュリティをどの様に実現するか? ◼ 単一クラスタ内で複数システムを稼動させる構成ではK8s/AWSリソースが混在 ◼ 情報漏洩等のリスクを考慮し、他システムのリソースにはアクセスを制限する必要がある EKSクラスタ Aシステム用 Namespace Bシステム用 Namespace Aシステム用 S3バケット Bシステム用 S3バケット Bシステム用 SQSキュー Aシステム用 SQSキュー Aシステム 管理者 Bシステム 管理者 K8sリソース AWSリソース 他システムリソースにアクセス可能だとセキュリティリスク
  22. 21 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ③Namespace間のセキュリティ対策 管理者→K8sリソースのアクセス制御 1. 高度なセキュリティをどの様に実現するか? ◼ K8sのRBACリソースでシステム間の権限分離 ◼ EKS access entryでRBACとIAMを紐付け。IAMロールで認証、RBACで認可制御を行う EKSクラスタ Aシステム用 Namespace Role RoleBinding EKS Access Entry Group Bシステム用 Namespace Role RoleBinding EKS Access Entry Group Aシステム用IAMロール Bシステム用IAMロール 紐付け 紐付け Aシステム 管理者 Bシステム 管理者
  23. 22 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ③Namespace間のセキュリティ対策 K8sリソース→AWSリソースのアクセス制御 1. 高度なセキュリティをどの様に実現するか? ◼ EKS Pod IdentityでServiceAccount とIAMロールを紐付け ◼ ServiceAccountで認証、IAMロールで認可制御を行う EKSクラスタ Aシステム用 Namespace Aシステム用 S3バケット Bシステム用 S3バケット Bシステム用 SQSキュー Aシステム用 SQSキュー EKS Pod Identity Aシステム用IAMロール Aシステム用ServiceAccount Bシステム用 Namespace EKS Pod Identity Bシステム用IAMロール Bシステム用ServiceAccount 紐付け 紐付け
  24. 23 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ワーカーノードのセキュリティ対策 振る舞い検知 1. 高度なセキュリティをどの様に実現するか? ◼ 振る舞い検知とは、システムやネットワーク上でのユーザーやデバイスの行動パターンを監視し、 異常や潜在的な脅威を検出する方法 ◼ 通常の振る舞いから逸脱した行動が検知されると監視ツール経由でアラートが送信 ◼ ゼロデイ攻撃等、従来のシグネチャベースの対策では検出が難しい、未知の脅威に対して有効な手法 システム 未知の 脅威 通常の振る舞いから逸脱した行動 権限昇格 対話シェル実行 怪しいコマンド実行 怪しいツール実行 Etc…. 検知 監視ツール
  25. 24 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ワーカーノードのセキュリティ対策 振る舞い検知 1. 高度なセキュリティをどの様に実現するか? ◼ GuardDutyランタイムモニタリングでEKSワーカーノード(EC2)とコンテナの振る舞い検知が可能 ◼ aws-guardduty-agent(Daemonset)を導入するのみで自動で検知 EKSワーカーノード amazon-guardduty Namespace aws-guardduty-agent Aシステム用 Namespace コンテナ Amazon GuardDuty OS Bシステム用 Namespace コンテナ EKSランタイムモニタリング:有効
  26. 25 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ⑤EKSクラスタのセキュリティ対策 監査ログのリアルタイムモニタリング 1. 高度なセキュリティをどの様に実現するか? ◼ 監査ログとはシステム内の一連のイベントやアクションを記録したログファイル ◼ 監査ログのリアルタイムモニタリングは、不正アクセスや異常な活動の早期発見に有効 ◼ AWSリソースに対しての監査ログはAWS CloudTrailで取得可能だが、EKSクラスタ内のK8sリソースに対しての監査ログは別途 出力されるため個別に対策が必要 S3バケット SQSキュー EKSクラスタ AWSリソースへの操作は CloudTrailに記録される K8sリソースへの操作は EKSクラスタ監査ログに 記録される
  27. 26 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ⑤EKSクラスタのセキュリティ対策 監査ログのリアルタイムモニタリング 1. 高度なセキュリティをどの様に実現するか? ◼ Guardduty EKSプロテクションでK8sリソース操作の監査ログモニタリングが可能 ◼ EKSコントロールプレーン内のkube-apiserverが出力する監査ログをGuardDutyがモニタリング ◼ CloudTrailと併用する事でシステム全体の監査ログモニタリングが可能になる Amazon GuardDuty EKSクラスタ コントロールプレーン ※AWSマネージド EKSワーカーノード クラスタ管理者 アプリ開発者 kubectl kubectl YYYYMMDD XXPod create ….. ….. 監査ログ EKS監査ログモニタリング:有効
  28. 27 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    Copyright (C) Nomura Research Institute, Ltd. All rights reserved. 27 2. 高度な信頼性をどの様に実現するか?
  29. 28 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    高度な信頼性を得るための考慮ポイント 2. 高度な信頼性をどの様に実現するか? 複数リージョン、AZへのリソースの分散配置 その1 リリース時に問題があった際に 即座にリリース前の状態に戻せる様にする その2 アプリエラー件数ゼロのEKSクラスタメンテナンス その3 Blue/Green デプロイメントを活用
  30. 29 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    その1. リソースの分散配置 複数リージョンへの分散配置 2. 高度な信頼性をどの様に実現するか? ◼ 各リージョンにEKSクラスタ、AWSリソースを配置 ◼ Route53のレコードを書き換える事でDR発動 ◼ AWSデータストアのリージョン間レプリケーションの機能を活用してサイト間のデータ同期を行う EKSクラスタ 正サイトリージョン EKSクラスタ DRサイトリージョン EFSファイルシステム EFSファイルシステム レプリケーション S3バケット S3バケット レプリケーション Auroraクラスタ Auroraクラスタ レプリケーション Amazon Route 53 通常時 エンドポイント エンドポイント
  31. 30 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    その1. リソースの分散配置 複数アベイラビリティーゾーン(AZ)への分散配置 2. 高度な信頼性をどの様に実現するか? ◼ ワーカーノードをマルチAZ構成で配置(EKSノードグループにマルチAZなサブネットを複数指定) ◼ Podを複数台起動させるだけでは不十分。偏る可能性あり。podAntiAffinityを設定してワーカーノード、AZ間で分散配置する リージョン AZ 1 AZ 2 AZ 3 EKSノードグループ EKSワーカーノード EKSワーカーノード EKSワーカーノード spec: replicas: 3 template: spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: topologyKey: failure- domain.beta.kubernetes.io/zone weight: 100 - podAffinityTerm: topologyKey: kubernetes.io/hostname weight: 100 マニフェストファイル
  32. 31 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    その2. 即座にリリース前の状態に戻せる様にする 2つのレイヤでのBlue/Greenデロイメント 2. 高度な信頼性をどの様に実現するか? 現Ver.EKSクラスタ 現Ver.アプリケーション 新Ver.アプリケーション 新Ver.アプリに切り替え 新Ver.EKSクラスタ 新Ver.クラスタに切り替え アプリケーション Blue/Greenデロイメントによるアプリリリース Blue/GreenデプロイメントによるEKSクラスタバージョンアップ
  33. 32 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    その2. 即座にリリース前の状態に戻せる様にする ArgoRolloutsを用いたBlue/Greenデロイメント 2. 高度な信頼性をどの様に実現するか? ◼ ArgoRolloutsで新バージョンアプリケーションの自動作成とコマンドによる Blue/Green切り替えが可能 apiVersion: v1 kind: Service metadata: name: blue-green-svc spec: type: ClusterIP selector: app: blue-green Serviceのマニフェストファイル アプリケーションRolloutのマニフェストファイル apiVersion: argoproj.io/v1alpha1 kind: Rollout spec: template: metadata: labels: app: blue-green strategy: blueGreen: activeService: blue-green-svc 現Ver.アプリケーションReplicaSet 新Ver.アプリケーションReplicaSet rollouts promoteコマンドで Blue/Green切り替え
  34. 33 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    その2. 即座にリリース前の状態に戻せる様にする ALBの機能を活用した接続先EKSクラスタの切り替え 2. 高度な信頼性をどの様に実現するか? ◼ EKSクラスタの切り替えに使用するため、Application Load Balancer(ALB)はK8Sリソースとしてでは無くスタンドアローンで構築 ⚫ Ingressリソースとして、EKSクラスタ内で稼動するNginx Ingress Controllerを導入 ◼ エンドユーザからの接続を待受けるリスナールールを現EKSクラスタのターゲットグループに紐付け ◼ 稼動確認用Cookie、ヘッダ付与で新EKSクラスタに振り分けるリスナールールも用意 ALB リスナー 現EKSクラスタ用 ターゲットグループ 新クラスタ用 ターゲットグループ リスナールール リクエストに稼動確認用Cookie or ヘッダが付与されていたら デフォルトルール 優先度:高 優先度:低 アプリ開発者 エンドユーザ 現EKSクラスタ Node Port NGINX Ingress Controller 新EKSクラスタ Node Port NGINX Ingress Controller
  35. 34 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    その2. 即座にリリース前の状態に戻せる様にする ALBの機能を活用した接続先EKSクラスタの切り替え 2. 高度な信頼性をどの様に実現するか? ◼ デフォルトルールの振り分け先を新クラスタ用ターゲットグループに切り替える事で、エンドユーザからの通信を新EKSクラスタに向け る事ができる ◼ ターゲットグループ切替前からの仕掛かり中リクエスト、切替え中の新規リクエストは現EKSクラスタで引続き 処理されるのでサービス閉塞すること無く切替える事が可能(ALBの仕様) ALB リスナー 現EKSクラスタ用 ターゲットグループ 新クラスタ用 ターゲットグループ リスナールール リクエストに稼動確認用Cookie or ヘッダが付与されていたら デフォルトルール 優先度:高 優先度:低 アプリ開発者 エンドユーザ 現EKSクラスタ Node Port NGINX Ingress Controller 新EKSクラスタ Node Port NGINX Ingress Controller 新Ver.クラスタに切り替え
  36. 35 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    その3. アプリエラー件数ゼロのEKSクラスタメンテナンス Podの安全停止設定 2. 高度な信頼性をどの様に実現するか? ◼ EKSクラスタを維持運用する中では、EC2インスタンスのリタイアメント等でワーカーノードを停止させる場面がある ◼ ノード上で起動しているPodを他のワーカーノードに退避させる必要あり ◼ Podの退避は実際にはPodが停止し、その後別ワーカーノードでPodが起動する事で実現される ◼ このPodの停止時にもシステムエラーは許容できないが、Serviceの仕様上Pod停止前にリクエストの振り分け対象から該当Podを手動で切離 す事はできない EKSワーカーノード EKSワーカーノード リタイアメントで停止する必要あり ①Pod停止 ②別ワーカーノードでPod起動 Pod停止前にリクエストの振り分け対象から 該当Podを手動で切離す事はできない
  37. 36 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    その3. アプリエラー件数ゼロのEKSクラスタメンテナンス Podの安全停止設定 2. 高度な信頼性をどの様に実現するか? ◼ 受入れたリクエストの処理が完了する時間分、Podが停止を待つ設定を入れる ◼ 具体的には、アプリケーションのマニフェストファイルに、 一律でPreStopフックでsleepコマンド実行、terminationGracePeriodSecondを明示的に指定する ⚫ PreStopフックは、 コンテナが停止する前に任意のコマンドを実行できる機能 この機能を利用して、アプリPodがkubernetesのServiceから切り離され、受け取ったリクエストの処理が終了するまでの時 間コンテナ停止を待つ様にsleepコマンドを実行 ⚫ terminationGracePeriodSecondsは、Podが強制終了されるまでの時間を設定するもの Pod停止の前にリクエストの処理が完了する時間分 待つ設定を入れる PreStopフックでsleepコマンド実行 terminationGracePeriodSeconds
  38. 37 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    Copyright (C) Nomura Research Institute, Ltd. All rights reserved. 37 3. EKS運用で直面した問題とその解決策
  39. 38 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    住信SBIネット銀行様の事例 3. EKS運用で直面した問題とその解決策 ◼ 次世代のマイクロサービス共通基盤としてEKSを採用 ◼ 「WEBフロントシステム※」「かんたん住宅ローン」をはじめとした複数の重要システムが共通基盤上で稼動中 ◼ マイクロサービス共通基盤を数年運用する中で発生したEKSに関連する問題とその解決方法についてお話しします かんたん住宅ローン ※現在一部機能がマイクロサービス共通基盤上で稼動。機能を順次移行中。 WEBフロントシステム※
  40. 39 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① IPアドレスが涸渇してPodが起動できなくなった! どんな課題だった? 3. EKS運用で直面した問題とその解決策 ◼ EKSのPodはVPCサブネットのIPアドレスを消費する(VPC CNIプラグインの仕様) ◼ マイクロサービス共通基盤の運用開始当初は障害時の影響分離のためEKSクラスタを複数構築する方針だったが、その後シス テム間共用クラスタとして複数システムを載せる方針に変ったため涸渇が発生した ◼ IPアドレスが涸渇する事で、EKSワーカーノードが追加できなくなる、Podが起動できなくなるという問題が発生 Virtual private cloud (VPC) Az-a サブネット(/24) EKSワーカーノード IPアドレス IPアドレス IPアドレス EKSワーカーノード IPアドレス EKSのVPC CNIプラグインは Pod毎にVPCサブネット内のIPアドレスを消費する Az-c サブネット(/24) EKSワー カーノード IPアドレス Az-d サブネット(/24) EKSワー カーノード IPアドレス IPが涸渇 専用クラスタ→システム間共用クラスタ Aシステム Aシステム Aシステム Bシステム Bシステム Bシステム IPアドレス Cシステム
  41. 40 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① IPアドレスが涸渇してPodが起動できなくなった! どうやって解決した?(暫定対応) 3. EKS運用で直面した問題とその解決策 ◼ 暫定対策1: VPC CNIプラグインのパラメータチューニング ⚫ VPC CNIプラグインはPod起動より前にワーカーノード内にIPアドレスを前持って確保する仕様 ⚫ VPC CNIプラグインのパラメータを変更して、IPアドレスの事前確保の数を小さくする事で空きIPアドレスを増やしてしのぐ • WARM_IP_TARGET:warm pool として確保する IP アドレス数 • MINIMUM_IP_TARGET:Amazon VPC CNI のコンポーネントにより最低限確保する IP アドレス数 ◼ 暫定対策2: ワーカーノードに割り当てるサブネットの追加 ⚫ ワーカーノードの自動拡張機能は、新規ワーカーノードをどのサブネットで起動させるかの判断にIPアドレスの空き状況を見ない仕様 ⚫ その結果、小さいCIDRのサブネットにワーカーノードが偏って起動してしまい、再びIPアドレスが涸渇した サブネット EKSワーカーノード IPアドレス IPアドレス EKSワーカーノードはPod起動より前 にIPアドレスを複数確保する VPC CNIプラグイン ・WARM_IP_TARGET ・MINIMUM_IP_TARGET Az-a サブネット(/24) Az-a サブネット(/21) NEW EKS ワーカーノード EKS ワーカーノード IPアドレス IPアドレス IPアドレス サブネットを追加しても ワーカーノードが偏って起動する事で IPアドレスの涸渇が発生 暫定対策1: VPC CNIプラグインのパラメータチューニング 暫定対策2: ワーカーノードに割り当てるサブネットの追加
  42. 41 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① Podが想定以上稼動してIPアドレスが涸渇した! どうやって解決した?(恒久対応) 3. EKS運用で直面した問題とその解決策 ◼ EKSクラスタ専用の/16のCIDRブロックを複数作成し、その中に極力大きい単一のサブネットを作成した ◼ EKSバージョンアップ時の新バージョンのEKSクラスタをこのサブネット上で構築した ◼ これにより、Podに割り振る事ができるIPアドレス数を大幅に大きくする事ができた VPC CIDRブロック(/16)① Az-a サブネット(AZ1用) EKS ワーカーノード EKS ワーカーノード CIDRブロック(/16)② Az-c サブネット(AZ1用) EKS ワーカーノード EKS ワーカーノード CIDRブロック(/16)③ Az-d サブネット(AZ1用) EKS ワーカーノード EKS ワーカーノード
  43. 42 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② Prometheus Server Podがクラッシュした! どんな課題だった? 3. EKS運用で直面した問題とその解決策 ◼ EKSクラスタ内で稼動する全Podのメトリクス収集とアラート通知にAmazon Managed Prometheus(AMP)を利用 ◼ AMPはサービス開始当初、メトリクス収集のためのPrometheus Server Podをセルフホストで稼動させる必要があった ◼ アプリPod数が増大する事でPrometheus Server Podのメモリ容量が徐々に逼迫し、最終的にクラッシュする事態に Amazon Managed Service for Prometheus(AMP) EKSワーカーノード メトリクス情報 保管 アラート設定 メトリクス収集 Prometheus Server Pod Aシステム Bシステム Cシステム Aシステム Bシステム Cシステム ・ ・ ・ メモリ逼迫で クラッシュ
  44. 43 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② Prometheus Server Podがクラッシュした! どうやって解決した? 3. EKS運用で直面した問題とその解決策 ◼ Prometheus Server Podのメモリ容量をアプリPodが増える度に随時拡張していたが、運用負担になる ◼ AMPは2023年11月26日からマネージドスクレイパーが利用可能 ◼ マネージドスクレイパーはEKSクラスタ外からメトリクス収集を行うAWSマネージドサービス ◼ EKSバージョンアップのタイミングと合せてマネージドスクレイパーを導入した ◼ これにより、EKSクラスタ内で自前でPrometheus Server Podを運用する必要が無くなり、運用負荷を減らす事できた メトリクス取得のPrometheus Podが不要に! Amazon Managed Service for Prometheus EKSワーカーノード メトリクス情報 保管 アラート設定 メトリクス収集 Aシステム Bシステム Cシステム Aシステム Bシステム Cシステム ・ ・ ・ マネージド スクレイパー
  45. 44 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ③ 別AZに移動したPrometheus Server Podが起動しない! どんな課題だった? 3. EKS運用で直面した問題とその解決策 ◼ マネージドスクレイパーに移行する前に発生した問題 ◼ ワーカーノードのメンテでPrometheus Server Podを退避させたところ、別AZのワーカーノードにスケジューリングされた ◼ Prometheus Server PodはEBSボリュームをマウントする仕様 ◼ EBSボリュームはAZリソースなのでAZを跨いでマウントする事ができない ◼ 別AZ上のPrometeheus Server PodはPVをマウントできずに起動に失敗した Az-a EKS ワーカーノード メンテ対象 Prometheus Server Pod EBSボリューム マウント Az-c EKS ワーカーノード Prometheus Server Pod 起動失敗 EBSボリュームはAZリソースなのでAZを跨いでマウントできない Drainコマンドで退避 マウント
  46. 45 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ③ 別AZに移動したPrometheus Server Podが起動しない! どうやって解決した? 3. EKS運用で直面した問題とその解決策 ◼ この問題が発生しない様にワーカーノードのメンテ手順を修正した ◼ 事前に同じAZにワーカーノードを起動させ、そこにPrometheus Sever Podを退避させる様にした ◼ マネージドスクレイパーを導入する事でPrometheus Server Podが無くなったため、現在はこの運用は不要になっています ◼ EBSボリュームをマウントするPodを運用する際には注意が必要 Az-a EKS ワーカーノード メンテ対象 Prometheus Server Pod EBSボリューム マウント EKS ワーカーノード Prometheus Server Pod Drainコマンドで退避 マウント Az-c EKS ワーカーノード NEW
  47. 46 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ CoreDNSがパニック! どんな課題だった? 3. EKS運用で直面した問題とその解決策 ◼ KubernetesにとってDNSによる名前解決はクラスタ内のPod間通信の必須要素 ◼ EKSクラスタ内部で名前解決を行うプラグインであるCoreDNSにパニックが発生し、名前解決ができない問題が発生 ◼ Pod間通信に影響が出てしまう事態に。。。 EKSクラスタ アプリA アプリB コンテナ間通信には CoreDNSでの名前解決が必要 CoreDNSアドオン アプリBのサービス 10.100.1.XXX アプリCのサービス 10.100.2.XXX ・ ・ ・ パニック発生
  48. 47 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ CoreDNSがパニック! どうやって解決した? (暫定対応) 3. EKS運用で直面した問題とその解決策 ◼ CoreDNSはパニック状態になった事が判るPrometheusメトリクス(coredns_panics_total)を出力する ◼ coredns_panics_totalを収集/アラートする様に、メトリクス収集設定/アラート設定をAMPに追加 ◼ パニック状態を検知したら手動でCoreDNSコンテナを再起動する運用を行った EKSワーカーノード CoreDNSアドオン パニック発生 Amazon Managed Service for Prometheus(AMP) アラート設定 ・coredns_panics_total > 0 ならアラート ・ ・ ・ マネージド スクレイパー メトリクス収集設定 ・CoreDNS Podのcoredns_panics_total を収集 ・ ・ ・
  49. 48 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ CoreDNSがパニック! どうやって解決した? (恒久対応) 3. EKS運用で直面した問題とその解決策 ◼ 共通基盤では、AWSリソースのエイリアスをRoute53プライベートホストゾーンで管理している ◼ CoreDNSのRoute53プラグインを使って、Route53プライベートホストゾーンをCoreDNSに同期していた ◼ Route53プラグインを導入しなくても、CoreDNSがリゾルバとしてプライベートホストゾーンに問合せてくれる事が判る ◼ Routet53プラグインがパニックの原因の可能性があると考え、CoreDNSから削除したところパニックは発生しなくなった EKSクラスタ Route 53 ドメイン名 タイプ レコード db.XXX.jp CNAME クラスタエンドポイント db-replica.XXX.jp CNAME 読み込みエンドポイント プライベートホストゾーン CoreDNSアドオン Route53 プラグイン 同期
  50. 49 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ◼金融システムには高度なセキュリティ、信頼性が必要 ◼高度な要求をEKS環境で満たすためには、、 まとめ クラスタ内の各層でセキュリティ対策を実施! 高度なセキュリティ 分散配置、Blue/Greenデプロイメント、Podの安全停止設定 を活用! 高度な信頼性
  51. 50 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    まとめ EKS運用はIaaSベースのシステムとは 種類の異なる問題に直面する 新機能を活用して EKS構成を継続的に進化させる事が重要! EKS Auto Modeの導入を検討中