概要
Amazon Elastic Kubernetes Service (EKS)で使用可能な、AWS Load Balancer Controller(LBC)がApplication Load Balancer(ALB)のURLとホストヘッダーの書き換えに対応しました。
これまでは、URLやホストヘッダーを書き換えるには、独自のアプリケーションロジックを組むか、サードパーティ製のプロキシを導入・管理する必要があり、これはEKSでも同様でした。
この課題に対し、昨年ALB自体に書き換え機能が実装され、続いてLBCもこの機能に対応しました。これにより、追加のアプリ実装などなしに高度なルーティングがAWSのインフラ層(ALB)で実現可能になりました。
※この機能は現時点ではALBでのみサポートされており、他のロードバランサー(例:NLBなど)では使用できません。
本記事では、これらの機能を実装するためのIngressの記述方法を解説します。
LBCの導入経験があり、Ingressの基本的な仕組みを理解している方を対象としています。
LBCの導入方法やIngressの基本について知りたい方は、こちらのiret.media記事「EKS と AWS Load Balancer Controller で実現するPodへのアクセス制御」もあわせてご覧ください。
用語
- AWS Load Balancer Controller
- EKSクラスター向けのロードバランサーを管理できるオープンソースのコントローラーで、クラスターアプリケーションを外部に公開できます。
- Ingress
- LBCがロードバランサーを作成・管理するための設定を記述するマニフェスト(YAML形式の定義ファイル)です。
対応状況
ALBがURLとホストヘッダーの書き換えに対応したのは、2025年10月中旬頃のため比較的新しい機能です。
こちらのAWS ブログで仕組みやコンソールでの手順が説明されています。
LBCがALBのURLとホストヘッダーの書き換えに対応したのはv2.14.1のため、それ以上のバージョンを使用してください。
記述解説
LBCでURLやホストヘッダーの書き換えを行うためには下記のアノテーションが必要になります。
alb.ingress.kubernetes.io/transforms.${transforms-name}
LBC公式の記述例
- URLの書き換え
alb.ingress.kubernetes.io/transforms.my-service: >
[
{
"type": "url-rewrite",
"urlRewriteConfig": {
"rewrites": [
{
"regex": "^\\/api\\/(.+)$",
"replace": "/$1"
}
]
}
}
]
- ホストヘッダーの書き換え
alb.ingress.kubernetes.io/transforms.my-service: >
[
{
"type": "host-header-rewrite",
"hostHeaderRewriteConfig": {
"rewrites": [
{
"regex": "^(.+)\\.example\\.com$",
"replace": "$1.example.org"
}
]
}
}
]
解説
どちらも、リクエストがregexに一致した場合、一致した部分をreplaceの指定に従い書き換えます。
- ${transforms-name}は任意の名前を指定できますが、Ingressルール内でルーティングを定義する際のspec.serviceNameと一致させる必要があります。
- regexはreplaceは正規表現を使用できるため、下記のように/api/を取り除いて残りのパスだけにするなども可能です。
- 例:/api/users → /users
- “regex”: “^\\/api\\/(.+)$”
- “replace”: “/$1”
書き換えの確認
どのように書き換えたいかテストしたい場合、AWSコンソールでテストトランスフォームを使用できます。
- ロードバランサー > リスナー > ルールを追加する > トランスフォームを追加 > テストトランスフォームを選択(下記画像の矢印)

- 正規表現(regex)と置換値(replace)を入力し、テスト値に正規表現を含めることでテストできます(画像はホストヘッダーの場合)。

記述例
/example/* に一致するリクエストに対して、ALBはホストヘッダーを S3 バケットのアドレスに書き換えます。
- リクエスト:example-load-balancer.elb.ap-northeast-1.amazonaws.com/example/index.html
- パスが /example/* に一致するため、ALB がホストヘッダーを以下のように書き換えます。
- 実際のリクエスト:example-bucket.s3.ap-northeast-1.amazonaws.com/example/index.html
- 書き換える部分以外は変更されないため、/example/index.htmlはそのまま残ります。
- ${transforms-name}とspec.serviceNameを今回の例では
rewriteで一致させています。
alb.ingress.kubernetes.io/transforms.rewrite: >
[
{
"type": "host-header-rewrite",
"hostHeaderRewriteConfig": {
"rewrites": [
{
"regex": "example-load-balancer.elb.ap-northeast-1.amazonaws.com",
"replace": "example-bucket.s3.ap-northeast-1.amazonaws.com"
}
]
}
}
]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /example/*
pathType: ImplementationSpecific
backend:
service:
name: rewrite
port:
number: 443
まとめ
AWS Load Balancer ControllerがURLとホストヘッダーの書き換えに対応したため、Ingressの記述方法を紹介しました。
URLとホストヘッダーの書き換え以外のカスタマイズについては、LBC ドキュメントを参照ください。