Ambassador Edge Stack を 3.7.x から 3.8.x へアップデートする際に必要なユーザ定義
2025-04-24
azblob://2025/04/23/eyecatch/2025-04-23-ambassador-update-from-3-7-to-3-8-000.jpg

はじめに

Ambassador Edge Stack(以下、Ambassador)は、Kubernetes 環境向けの高機能な API ゲートウェイおよびイングレスコントローラーとして、クラウドネイティブな環境で、スケーラブルかつ安全な API 管理を提供し、マイクロサービスアーキテクチャにおける通信の中心的な役割を担い、トラフィックの制御、セキュリティの確保、API の公開を効率的に実現します。
また、Ambassadorは、Envoy プロキシをベースとして宣言的な設定アプローチを採用しており、Kubernetes のカスタムリソース定義(CRD)を活用することで、インフラストラクチャをコードとして管理する GitOps の実践にも適しています。
 
本記事では、Azure Kubernetes Service(以下、AKS) で使用しているAmbassador を 3.7.x から 3.8.x へのアップデート作業時に発生したエラーとともに、必要となるユーザー定義の変更点について確認します。
 

前提条件

  • Kubernetes クラスター v1.31.7 の AKS
  • kubectl v1.31.6
  • Helm v3.17.1
  • バックアップなどのアップデート事前準備作業が完了済み
  • バージョンアップ前の Ambassador のアプリバージョン v3.7.x
  • バージョンアップ後の Ambassador のアプリバージョン v3.8.x
  • バージョンアップ前の Ambassador の Helm Chart v8.7.x
  • バージョンアップ後の Ambassador の Helm Chart v8.8.x
  • Ambassador のライセンスを取得済み
     

発生したエラーと解決方法

バックアップなどのすべてのアップデート前準備を完了したのちに、Ambassador のアプリバージョンを 3.7.x から 3.8.x へのバージョンアップのために下記のコマンドを実行するとエラーが発生しました。
 
# 実行コマンド
$ helm upgrade edge-stack datawire/edge-stack -n ${NAME_SAPCE} --version 8.7.2 --dry-run # --version では Helm Chart Version を指定する。
# 出力されたエラー
Error: UPGRADE FAILED: template: edge-stack/charts/emissary-ingress/templates/ambassador-agent.yaml:1:14: executing "edge-stack/charts/emissary-ingress/templates/ambassador-agent.yaml" at <.Values.agent.enabled>: nil pointer evaluating interface {}.enabled
 
agent.enable が未定義もしくは正しく値を受け渡せていないことが原因でエラーが出ていそうなので、Ambassador の Helm Chart にてユーザが定義した値を下記コマンドで出力して確認します。
 
$ helm get values edge-stack -n ${NAME_SAPCE} > edge-stack-values.yaml

GitHub | Ambassador Edge Stack リポジトリから Ambassador の Helm Chart が参照している values.yaml までたどり、こちらを参考に、出力した edge-stack-values.yaml に下記の内容を追加します。
 
# ~~~~~~~~ 省略
emissary-ingress:
  agent:
    enabled: true
# ~~~~~~~~ 省略
 
以前までは、上記が定義されていない場合はデフォルトで true として動作していましたが、3.8.x のバージョンではユーザが定義しなければいけなくなったようです。
 
修正後、下記のコマンドを実行すると、アップデートシミュレーションが成功しました。
 
$ helm upgrade edge-stack datawire/edge-stack -n ${NAME_SAPCE} --version 8.7.2 -f edge-stack-values.yaml --dry-run
 
アップデートシミュレーションが完了したので、--dry-run フラグを外してコマンドを実行、アップデートを実施、helm や kubectl、Azure Portal などを駆使して動作確認をしたところ、問題なくアップデートが完了しました。
 

まとめ

Ambassador のアプリバージョンを 3.7.x から 3.8.x へアップデートする場合、ユーザが定義した値を修正せずに helm upgrade ~ を実行するだけではアップデートできませんでした。
そのため、3.7.x に使用しているユーザが定義した値を 3.8.x に適応したスキーマに修正してからアップデートを行う必要がありました。
Kubernetes 内の Ambassador を Helm で管理する場合には、手動でバージョンを管理することから逃れることができないので、引き続き安全にアップデートできるようにしていきたいと思います。
 

参考リンク