ドメイン名に基づくリクエストの転送
Ingress を作成して、ドメイン名または空のドメイン名に基づいてリクエストを転送します。
ドメイン名
この例では、ルーティングパスを /hello に設定します。 demo.domain.ingress.top/hello へのリクエストはバックエンドサービスに転送されます。
-
次のマニフェストをデプロイして、指定されたドメイン名に基づいてリクエストを転送する Service、Deployment、および Ingress を作成します。
YAML の例
Kubernetes 1.19 以降
apiVersion: v1
kind: Service
metadata:
name: demo-service
namespace: default
spec:
ports:
- name: port1
port: 80
protocol: TCP
targetPort: 8080
selector:
app: demo
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
imagePullPolicy: IfNotPresent
name: demo
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
namespace: default
spec:
ingressClassName: alb
rules:
- host: demo.domain.ingress.top
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /hello
pathType: ImplementationSpecific
Kubernetes 1.19 より前
apiVersion: v1
kind: Service
metadata:
name: demo-service
namespace: default
spec:
ports:
- name: port1
port: 80
protocol: TCP
targetPort: 8080
selector:
app: demo
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
imagePullPolicy: IfNotPresent
name: demo
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo
namespace: default
spec:
ingressClassName: alb
rules:
- host: demo.domain.ingress.top
http:
paths:
- backend:
serviceName: demo-service
servicePort: 80
path: /hello
pathType: ImplementationSpecific
-
kubectl get ing を実行して ALB インスタンスのアドレスを取得します。 次に、ADDRESS をインスタンスのアドレスに置き換えて、次のコマンドを実行します。
curl -H "host: demo.domain.ingress.top" ADDRESS/hello
期待される出力:
{"hello":"coffee"}
空のドメイン名
空のドメイン名とルーティングパス /hello を使用すると、ADDRESS/hello へのリクエストはバックエンドサービスに転送されます。
-
次のマニフェストをデプロイして、Service、Deployment、および Ingress を作成します。
YAML の例
Kubernetes 1.19 以降
apiVersion: v1
kind: Service
metadata:
name: demo-service
namespace: default
spec:
ports:
- name: port1
port: 80
protocol: TCP
targetPort: 8080
selector:
app: demo
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
imagePullPolicy: IfNotPresent
name: demo
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
namespace: default
spec:
ingressClassName: alb
rules:
- host: ""
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /hello
pathType: ImplementationSpecific
Kubernetes 1.19 より前
apiVersion: v1
kind: Service
metadata:
name: demo-service
namespace: default
spec:
ports:
- name: port1
port: 80
protocol: TCP
targetPort: 8080
selector:
app: demo
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
imagePullPolicy: IfNotPresent
name: demo
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo
namespace: default
spec:
ingressClassName: alb
rules:
- host: ""
http:
paths:
- backend:
serviceName: demo-service
servicePort: 80
path: /hello
pathType: ImplementationSpecific
-
kubectl get ing を実行して ALB インスタンスのアドレスを取得します。 次に、ADDRESS をインスタンスのアドレスに置き換えて、次のコマンドを実行します。
curl ADDRESS/hello
期待される出力:
{"hello":"coffee"}
パスに基づく転送
ALB Ingress は URL パスに基づいてリクエストを転送します。 pathType フィールドで一致モードを指定します。 pathType は 3 つのモードをサポートしています。
-
完全一致 (Exact): URL パスと完全に一致します。
-
デフォルト (ImplementationSpecific): ALB Ingress コントローラーはこれを完全一致として扱います。 path が指定されていない場合、デフォルトは / です。
-
プレフィックス一致 (Prefix): URL パスのプレフィックスと一致します。
各一致モードの例:
プレフィックス一致 (Prefix)
このモードは、/ で区切られた URL パス要素に対して、大文字と小文字を区別するプレフィックス一致を実行します。
ルールパス / は、/hello など、/ で始まるすべてのパスに一致します。
-
次のマニフェストをデプロイして、Ingress リソースを作成します。
YAML の例
Kubernetes 1.19 以降
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-path-prefix
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
backend:
service:
name: demo-service
port:
number: 80
pathType: Prefix
Kubernetes 1.19 より前
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo-path-prefix
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
backend:
serviceName: demo-service
servicePort: 80
pathType: Prefix
-
kubectl get ing を実行して ALB インスタンスのアドレスを取得します。 次に、ADDRESS を取得したアドレスに置き換えて、次のコマンドを実行します。
curl ADDRESS/hello
期待される出力:
{"hello":"coffee"}
完全一致またはデフォルト
ルールパス /hello は、/hello へのリクエストにのみ一致します。
-
次のマニフェストをデプロイして、Ingress リソースを作成します。
YAML の例
Kubernetes 1.19 以降
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-path
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /hello
backend:
service:
name: demo-service
port:
number: 80
pathType: Exact
Kubernetes 1.19 より前
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo-path
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service
servicePort: 80
pathType: Exact
-
kubectl get ing を実行して ALB インスタンスのアドレスを取得します。 次に、ADDRESS を取得したアドレスに置き換えて、次のコマンドを実行します。
curl ADDRESS/hello
期待される出力:
{"hello":"coffee"}
ヘルスチェックの設定
アノテーションを使用して ALB Ingress のヘルスチェックを設定します。
完全な YAML の例を表示するにはクリック
Kubernetes 1.19 以降
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/healthcheck-enabled: "true"
alb.ingress.kubernetes.io/healthcheck-path: "/"
alb.ingress.kubernetes.io/healthcheck-protocol: "HTTP"
alb.ingress.kubernetes.io/healthcheck-httpversion: "HTTP1.1"
alb.ingress.kubernetes.io/healthcheck-method: "HEAD"
alb.ingress.kubernetes.io/healthcheck-code: "http_2xx"
alb.ingress.kubernetes.io/healthcheck-timeout-seconds: "5"
alb.ingress.kubernetes.io/healthcheck-interval-seconds: "2"
alb.ingress.kubernetes.io/healthy-threshold-count: "3"
alb.ingress.kubernetes.io/unhealthy-threshold-count: "3"
spec:
ingressClassName: alb
rules:
- http:
paths:
# コンテキストパスを設定します
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80
# コンテキストパスを設定します
- path: /coffee
pathType: ImplementationSpecific
backend:
service:
name: coffee-svc
port:
number: 80
Kubernetes 1.19 より前
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/healthcheck-enabled: "true"
alb.ingress.kubernetes.io/healthcheck-path: "/"
alb.ingress.kubernetes.io/healthcheck-protocol: "HTTP"
alb.ingress.kubernetes.io/healthcheck-method: "HEAD"
alb.ingress.kubernetes.io/healthcheck-httpcode: "http_2xx"
alb.ingress.kubernetes.io/healthcheck-timeout-seconds: "5"
alb.ingress.kubernetes.io/healthcheck-interval-seconds: "2"
alb.ingress.kubernetes.io/healthy-threshold-count: "3"
alb.ingress.kubernetes.io/unhealthy-threshold-count: "3"
spec:
ingressClassName: alb
rules:
- http:
paths:
# コンテキストパスを設定します。
- path: /tea
backend:
serviceName: tea-svc
servicePort: 80
# コンテキストパスを設定します。
- path: /coffee
backend:
serviceName: coffee-svc
servicePort: 80
アノテーションの例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/healthcheck-enabled: "true"
alb.ingress.kubernetes.io/healthcheck-path: "/"
alb.ingress.kubernetes.io/healthcheck-protocol: "HTTP"
alb.ingress.kubernetes.io/healthcheck-httpversion: "HTTP1.1"
alb.ingress.kubernetes.io/healthcheck-method: "HEAD"
alb.ingress.kubernetes.io/healthcheck-code: "http_2xx"
alb.ingress.kubernetes.io/healthcheck-timeout-seconds: "5"
alb.ingress.kubernetes.io/healthcheck-interval-seconds: "2"
alb.ingress.kubernetes.io/healthy-threshold-count: "3"
alb.ingress.kubernetes.io/unhealthy-threshold-count: "3"
spec:
... ...
|
パラメーター
|
説明
|
デフォルト値
|
|
alb.ingress.kubernetes.io/healthcheck-enabled
|
バックエンドサーバーグループのヘルスチェックを有効にするかどうかを指定します。
-
true: ヘルスチェックを有効にします。
-
false: ヘルスチェックを無効にします。
|
false
|
|
alb.ingress.kubernetes.io/healthcheck-path
|
ヘルスチェックに使用されるパス。
|
/
|
|
alb.ingress.kubernetes.io/healthcheck-protocol
|
ヘルスチェックに使用されるプロトコル。
-
HTTP: HEAD または GET リクエストを送信してサーバーの正常性を確認します。
-
HTTPS: HEAD または GET リクエストを送信してサーバーの正常性を確認します。
-
TCP: SYN ハンドシェイクパケットを送信してポートの可用性を確認します。
-
GRPC: POST または GET リクエストを送信してサーバーの正常性を確認します。
|
HTTP
|
|
alb.ingress.kubernetes.io/healthcheck-httpversion
|
HTTP プロトコルバージョン。 healthcheck-protocol が HTTP または HTTPS に設定されている場合にのみ有効です。
|
HTTP1.1
|
|
alb.ingress.kubernetes.io/healthcheck-method
|
ヘルスチェックに使用されるメソッド。
重要
healthcheck-protocol が GRPC に設定されている場合、このパラメーターを POST または GET に設定する必要があります。
|
HEAD
|
|
alb.ingress.kubernetes.io/healthcheck-httpcode
|
正常なバックエンドサーバーを示すステータスコード。
カンマで区切って、1 つ以上のオプションを指定します。
-
http_2xx
-
http_3xx
-
http_4xx
-
http_5xx
|
http_2xx
|
|
alb.ingress.kubernetes.io/healthcheck-code
|
正常なバックエンドサーバーを示すステータスコード。 両方が指定されている場合、healthcheck-httpcode よりも優先されます。
有効な値は healthcheck-protocol によって異なります:
-
HTTP または HTTPS:
カンマで区切って、1 つ以上のオプションを指定します。
-
http_2xx
-
http_3xx
-
http_4xx
-
http_5xx
-
GRPC: 値は 0 から 99 までの整数である必要があります。
カンマで区切って、最大 20 の値の範囲を指定します。
|
-
HTTP または HTTPS
http_2xx
-
GRPC
0
|
|
alb.ingress.kubernetes.io/healthcheck-timeout-seconds
|
ヘルスチェックのタイムアウト (秒)。 有効な値:1 ~ 300。
|
5
|
|
alb.ingress.kubernetes.io/healthcheck-interval-seconds
|
ヘルスチェックの間隔 (秒)。 有効な値:1 ~ 50。
|
2
|
|
alb.ingress.kubernetes.io/healthy-threshold-count
|
バックエンドサーバーを正常とマークするために必要な連続した正常なヘルスチェックの回数。 有効な値:2 ~ 10。
|
3
|
|
alb.ingress.kubernetes.io/unhealthy-threshold-count
|
バックエンドサーバーを異常とマークするために必要な連続した失敗したヘルスチェックの回数。 有効な値:2 ~ 10。
|
3
|
|
alb.ingress.kubernetes.io/healthcheck-connect-port
|
ヘルスチェックに使用されるポート。
|
0
説明
0 の値は、バックエンドサーバーのポートがヘルスチェックに使用されることを示します。
|
HTTP リクエストを HTTPS にリダイレクトする
次のアノテーションを追加して、HTTP リクエストを HTTPS ポート 443 にリダイレクトします。
重要
-
この機能は、リスナーポート 80 の HTTP 転送ルールにのみ適用されます。
-
このアノテーションは、RemoveHeader、InsertHeader、Cors などのカスタム転送アクションのアノテーションと一緒に使用する必要があります。
-
このアノテーションを使用する前に、AlbConfig のポート 443 に HTTPS リスナーが設定されていることを確認してください。 「AlbConfig を使用して ALB リスナーを設定する」をご参照ください。
YAML の例
Kubernetes 1.19 以降
apiVersion: v1
kind: Service
metadata:
name: demo-service-ssl
namespace: default
spec:
ports:
- name: port1
port: 80
protocol: TCP
targetPort: 8080
selector:
app: demo-ssl
sessionAffinity: None
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-ssl
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo-ssl
template:
metadata:
labels:
app: demo-ssl
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
imagePullPolicy: IfNotPresent
name: demo-ssl
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/ssl-redirect: "true"
name: demo-ssl
namespace: default
spec:
ingressClassName: alb
tls:
- hosts:
- ssl.alb.ingress.top
rules:
- host: ssl.alb.ingress.top
http:
paths:
- backend:
service:
name: demo-service-ssl
port:
number: 80
path: /
pathType: Prefix
Kubernetes 1.19 より前
apiVersion: v1
kind: Service
metadata:
name: demo-service-ssl
namespace: default
spec:
ports:
- name: port1
port: 80
protocol: TCP
targetPort: 8080
selector:
app: demo-ssl
sessionAffinity: None
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-ssl
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo-ssl
template:
metadata:
labels:
app: demo-ssl
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
imagePullPolicy: IfNotPresent
name: demo-ssl
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/ssl-redirect: "true"
name: demo-ssl
namespace: default
spec:
ingressClassName: alb
tls:
- hosts:
- ssl.alb.ingress.top
rules:
- host: ssl.alb.ingress.top
http:
paths:
- backend:
serviceName: demo-service-ssl
servicePort: 80
path: /
pathType: Prefix
|
パラメーター
|
説明
|
アノテーションの例
|
|
alb.ingress.kubernetes.io/ssl-redirect: "true"
|
HTTP リクエストを HTTPS ポート 443 にリダイレクトします。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/ssl-redirect: "true"
name: demo-ssl
... ...
|
バックエンドの HTTPS または gRPC の設定
次のアノテーションを追加して、バックエンドプロトコルとして HTTPS または gRPC を使用します。
YAML の例
Kubernetes 1.19 以降
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/backend-protocol: "grpc"
name: demo-alb-ingress
spec:
ingressClassName: alb
tls:
- hosts:
- demo.alb.ingress.top
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grpc-demo-svc
port:
number: 9080
Kubernetes 1.19 より前
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/backend-protocol: "grpc"
name: demo-alb-ingress
spec:
ingressClassName: alb
tls:
- hosts:
- demo.alb.ingress.top
rules:
- host: demo.alb.ingress.top
http:
paths:
- backend:
serviceName: grpc-demo-svc
servicePort: 9080
path: /
pathType: Prefix
説明
バックエンドプロトコルは Ingress 作成後に変更できません。 変更するには、Ingress を削除して再作成してください。
|
パラメーター
|
説明
|
YAML の例
|
|
alb.ingress.kubernetes.io/backend-protocol
|
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/backend-protocol: "grpc"
name: demo-alb-ingress
... ...
|
正規表現の設定
alb.ingress.kubernetes.io/use-regex: "true" アノテーションを使用して、spec.rules の pathType: Prefix を持つパスルールに対して正規表現マッチングを有効にします。
重要
-
pathType: Prefix を持つパスルールにのみ適用されます。 カスタム転送条件とは独立して、spec.rules の path フィールドで正規表現構文を有効にします。
-
このアノテーションは、その値 (true または false) に関係なく正規表現マッチングを有効にします。 無効にするにはアノテーションを削除してください。
-
このアノテーションがない場合、パスに =^()[]|, など のような特殊文字が含まれていると Ingress の作成に失敗します。
-
カスタム転送条件 (alb.ingress.kubernetes.io/conditions.YOUR-SVC-NAME) のパス値は ALB に直接渡され、use-regex アノテーションは必要ありません。 正規表現マッチングを有効にするには、パス値に ~* または ~ プレフィックスを追加します。 use-regex アノテーションは、spec.rules の path フィールドにのみ影響します。
カスタム転送ルール
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.YOUR-SVC-NAME: | ## YOUR-SVC-NAME を実際の Service 名に置き換えます。これは、以下の backend.service.name と一致する必要があります。
[{
"type": "Path",
"pathConfig": {
"values": [
"~*/pathvalue1", ## 正規表現に ~* または ~ プレフィックスを追加します。プレフィックスの後のテキストが正規表現自体です。~* は大文字と小文字を区別する一致を示し、~ は大文字と小文字を区別しない一致を示します。
"/pathvalue2" ## 完全一致にはプレフィックスは必要ありません。
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test-path-for-alb
pathType: Prefix
backend:
service:
name: YOUR-SVC-NAME ## ここでの YOUR-SVC-NAME は、関連付けを定義するためにカスタム転送条件アノテーションで指定された Service 名と一致する必要があります。
port:
number: 88
Spec.rules
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/use-regex: "true" ## spec.rules のパスで正規表現を使用できるようにします。
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test-[a-z]-alb[()^]*
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 88
|
パラメーター
|
説明
|
|
|
alb.ingress.kubernetes.io/use-regex: "true"
|
spec.rules の pathType: Prefix を持つパスルールに対して正規表現を有効にします。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/use-regex: "true"
name: demo-alb-ingress
... ...
|
|
alb.ingress.kubernetes.io/conditions.YOUR-SVC-NAME
|
カスタム転送条件を設定します。 「ALB Ingress の転送ルールをカスタマイズする」をご参照ください。
YOUR-SVC-NAME を実際の Service 名に置き換えます。 この名前は、以下の backend.service.name と一致する必要があります。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.YOUR-SVC-NAME: | ## YOUR-SVC-NAME を実際の Service 名に置き換えます。これは、以下の backend.service.name と一致する必要があります。
[{
"type": "Path",
"pathConfig": {
"values": [
"~*/pathvalue1", ## 正規表現に ~* または ~ プレフィックスを追加します。プレフィックスの後のテキストが正規表現自体です。~* は大文字と小文字を区別する一致を示し、~ は大文字と小文字を区別しない一致を示します。
"/pathvalue2" ## 完全一致にはプレフィックスは必要ありません。
]
}
}]
name: ingress-example
... ...
|
次の表は、正規表現マッチングのルールを説明しています。
|
オブジェクト
|
プレフィックス
|
ルール例
|
クライアントパス
|
一致?
|
説明
|
|
ドメイン名
|
~ で始まる
|
~test.example.com
|
test.EXAMPLE.com
|
はい
|
ドメイン名は、大文字と小文字を区別しない正規表現マッチングをサポートします。
|
|
パス
|
~ で始まる
|
~/api
|
/API
|
はい
|
パスは、大文字と小文字を区別しない正規表現マッチングをサポートします。
|
|
~* で始まる
|
~*/api
|
/Api
|
いいえ
|
パスは、大文字と小文字を区別する正規表現マッチングをサポートします。
|
正規表現のプレフィックス一致
正規表現マッチングは、デフォルトで「包含一致」になります。 特定のコンテンツで始まるパスのみに一致させるには、式の先頭に ^ を追加します。 たとえば、^/api は /api で始まるパスにのみ一致します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-example
annotations:
alb.ingress.kubernetes.io/use-regex: "true" ## 正規表現マッチングを有効にします。
alb.ingress.kubernetes.io/conditions.YOUR-SVC-NAME: | ## YOUR-SVC-NAME を実際のサービス名に置き換えます。これは、以下の backend.service.name と一致する必要があります。
[
{
"type": "Path",
"pathConfig": {
"values": [
"~*^/pathvalue1", # ~* または ~ で始まるパスは、正規表現マッチングを示します。キャレット (^) は「/pathvalue1 で始まる」ことを示します。
"/pathvalue2" # 標準のプレフィックスまたは完全一致の場合、~* または ~ を追加しないでください。
]
}
}
]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test-path-for-alb
pathType: Prefix
backend:
service:
name: YOUR-SVC-NAME # 実際のアノテーションと一致するサービス名に置き換えます。
port:
number: 88
書き換えの設定
ALB Ingress は、バックエンド Service に転送する前にリクエストパスを書き換えます。 次の 2 つのアノテーションを使用します:
設定例
例 1: プレフィックスの削除
次の YAML の例では、path: /something(/|$)(.*) は正規表現を使用して、クライアントリクエストパスを 3 つの部分に分割します:
-
/something: 削除するプレフィックスに一致します。
-
(/|$): 最初のキャプチャグループで、/something の後の / またはパスの末尾 ($) のいずれかに一致します。
-
(.*): 2 番目のキャプチャグループで、/something/ の後のすべての文字に一致し、書き換えられたパスでは ${2} として参照されます。
alb.ingress.kubernetes.io/rewrite-target アノテーションは、書き換えられたパスを / の後に ${2} が続くものとして指定します。 次の表に、書き換えの結果を示します。
|
元のクライアントパス
|
パスの正規表現一致
|
書き換えられたパス
|
|
/something
|
一致。 2 番目のキャプチャグループは空です。
|
/
|
|
/something/
|
一致。 2 番目のキャプチャグループは空です。
|
/
|
|
/something/new
|
一致。 2 番目のキャプチャグループは new です。
|
/new
|
|
/something-new/item
|
一致しません。 この例では、リクエストがどのルーティングルールにも一致しないため、ALB Ingress は 503 ステータスコードを返します。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # path フィールドで正規表現を使用できるようにします。
alb.ingress.kubernetes.io/rewrite-target: /${2} # このアノテーションは正規表現の置換をサポートします。
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /something(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080
例 2: 複数の部分をキャプチャして再配置する
次の例では、パス /items/(.*)/(.*)/(.*) の複数の部分をキャプチャして再配置します。 また、パスセグメントをクエリパラメーターに変換しますが、クライアント側の変更は必要ありません。 書き換えられたパスは、/、2 番目のキャプチャグループ ${2}、文字列 ?code=、3 番目のキャプチャグループ ${3} で構成されます。 次の表に、書き換えの結果を示します。
この例では、クライアントが 4 つのセグメントを持つ固定パス形式を使用する必要があります。
|
元のクライアントパス
|
パスの正規表現一致
|
書き換えられたパス
|
|
/items/electronics/computers/554
|
一致。 2 番目のキャプチャグループは computers で、3 番目は 554 です。
|
/computers?code=554
|
|
/items/produce/fruits/12
|
一致。 2 番目のキャプチャグループは fruits で、3 番目は 12 です。
|
/fruits?code=12
|
|
/items/headphones/5
|
一致しません。 この例では、リクエストがどのルーティングルールにも一致しないため、ALB Ingress は 503 ステータスコードを返します。
|
|
/drinks/41
|
一致しません。 この例では、リクエストがどのルーティングルールにも一致しないため、ALB Ingress は 503 ステータスコードを返します。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # path フィールドで正規表現を使用できるようにします。
alb.ingress.kubernetes.io/rewrite-target: /${2}?code=${3} # このアノテーションは正規表現の置換をサポートします。
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /items/(.*)/(.*)/(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080
例 3: 複数のパスを単一のパスに書き換える
次の例では、正規表現を使用して複数のパス (/app-a(/|$)(.*) と /app-b(/|$)(.*)) に一致させ、それらを単一のパスに書き換えます。 書き換えられたパスは、/app-c/ の後に ${2} が続くものです。 次の表に、書き換えの結果を示します。
|
元のクライアントパス
|
パスの正規表現一致
|
書き換えられたパス
|
|
/app-a/item1
|
一致。 2 番目のキャプチャグループは item1 です。
|
/app-c/item1
|
|
/app-a/item2
|
一致。 2 番目のキャプチャグループは item2 です。
|
/app-c/item2
|
|
/app-a または /app-a/
|
一致。 2 番目のキャプチャグループは空です。
|
/app-c/
|
|
/drinks/41
|
一致しません。 この例では、リクエストがどのルーティングルールにも一致しないため、ALB Ingress は 503 ステータスコードを返します。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # path フィールドで正規表現を使用できるようにします。
alb.ingress.kubernetes.io/rewrite-target: /app-c/${2} # このアノテーションは正規表現の置換をサポートします。
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /app-a(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080
- path: /app-b(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080
例 4: ドメイン名の書き換え
alb.ingress.kubernetes.io/rewrite-target アノテーションは、パスの変更のみをサポートします。 ドメイン名やクエリパラメーターなど、URL の他の部分を変更するには、カスタム転送ルールを使用します。
書き換えルールのテスト
sed
コマンドを使用して、クライアントパスがパスの正規表現に一致するかどうかをテストし、書き換えられたパスをプレビューします。
この例では、例 2: 複数の部分をキャプチャして再配置するのキャプチャパス /items/(.*)/(.*)/(.*) と書き換えルール /${2}?code=${3} を使用します。
-
次のサンプルパスを path2.txt という名前のファイルに保存します:
/items/electronics/computers/554
/items/produce/fruits/12
/items/headphones/5
/drinks/41
-
パスが一致するかどうかを確認し、書き換えられたパスを表示します:
次のコマンドは、この例のパス正規表現 (/items/(.*)/(.*)/(.*)) と書き換えられたパス (/${2}?code=${3}) を sed に適合させます。 sed を使用する場合、/ などの特殊文字はバックスラッシュ (\) でエスケープする必要があり、キャプチャグループの参照は ${2} ではなく \2 と記述します。
sed -E 's#\/items\/(.*)\/(.*)\/(.*)#Matched: [] --- Rewritten: [/\2?code=\3]#' path2.txt
次の出力が期待されます。 最初の 2 つのパスはルールに一致して書き換えられますが、最後の 2 つは一致せず、変更されません。
Matched: [/items/electronics/computers/554] --- Rewritten: [/computers?code=554]
Matched: [/items/produce/fruits/12] --- Rewritten: [/fruits?code=12]
/items/headphones/5
/drinks/41
カスタムリスナーポートの設定
アノテーションを追加して、ポート 80 (HTTP) とポート 443 (HTTPS) の両方でサービスを公開します。
完全な YAML の例
Kubernetes 1.19 以降
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'
spec:
ingressClassName: alb
tls:
- hosts:
- demo.alb.ingress.top
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80
Kubernetes 1.19 より前
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'
name: cafe-ingress
spec:
ingressClassName: alb
tls:
- hosts:
- demo.alb.ingress.top
rules:
- host: demo.alb.ingress.top
http:
paths:
- backend:
serviceName: tea-svc
servicePort: 80
path: /tea
pathType: ImplementationSpecific
|
パラメーター
|
説明
|
YAML の例
|
|
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'
|
ポート 80 と 443 でサービスを公開します。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'
... ...
|
転送ルールの優先度の設定
デフォルトでは、ALB は次の基準に基づいて転送ルールの優先度を決定します:
-
システムは、Ingress リソースを namespace/name によって辞書順にソートします。 辞書順の値が小さい Ingress ほど優先度が高くなります。
まず名前空間が比較され、次に名前が文字ごとに比較されます。
-
単一の Ingress 内では、ルールは rules フィールドでの順序によって優先度が決まります。 最初にリストされているルールほど優先度が高くなります。
rules:
- host: www.example.com
http: ...
- host: www.test.com
http: ...
Ingress の namespace/name を変更せずに ALB 転送ルールの優先度を指定するには、次の Ingress アノテーションを追加します:
完全な YAML の例を表示するにはクリック
Kubernetes 1.19 以降
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/order: "2"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80
Kubernetes 1.19 より前
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "2"
name: cafe-ingress
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- backend:
serviceName: tea-svc
servicePort: 80
path: /tea
pathType: ImplementationSpecific
|
パラメーター
|
説明
|
値
|
YAML の例
|
|
alb.ingress.kubernetes.io/order
|
ALB 転送ルールの優先度を指定します。 値が小さいほど優先度が高くなります。
各ルールの優先度は、同じリスナー内で一意である必要があります。
|
[1, 1000]
デフォルト値: 10
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/order: "2"
spec:
... ...
|
アノテーションによるカナリアリリースの実装
ALB は、ヘッダー、Cookie、および重みに基づくカナリアリリースをサポートしています。 ベストプラクティスについては、「ALB Ingress を使用してカナリアリリースを実装する」をご参照ください。
|
パラメーター
|
説明
|
説明
|
|
alb.ingress.kubernetes.io/canary: "true"
|
カナリアリリース機能を有効にします。
|
|
-
指定されたヘッダーに基づいてカナリアトラフィックを分散する
|
パラメーター
|
説明
|
YAML の例
|
|
alb.ingress.kubernetes.io/canary-by-header
|
これらのアノテーションは、トラフィックルーティング用のカスタムリクエストヘッダーと値を定義します。 両方のアノテーションが必要です。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "1"
alb.ingress.kubernetes.io/canary: "true"
alb.ingress.kubernetes.io/canary-by-header: "location"
alb.ingress.kubernetes.io/canary-by-header-value: "hz"
name: demo-canary
spec:
... ...
|
|
alb.ingress.kubernetes.io/canary-by-header-value
|
リクエストに location: hz ヘッダーが含まれている場合、ALB はトラフィックをカナリア Service にルーティングします。 その他のリクエストは、Cookie や重みに基づくルールなど、優先度の低いルールに対して評価されます。
完全な YAML の例
Kubernetes 1.19 以降
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "1"
alb.ingress.kubernetes.io/canary: "true"
alb.ingress.kubernetes.io/canary-by-header: "location"
alb.ingress.kubernetes.io/canary-by-header-value: "hz"
name: demo-canary
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- backend:
service:
name: demo-service-hello
port:
number: 80
path: /hello
pathType: ImplementationSpecific
Kubernetes 1.19 より前
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "1"
alb.ingress.kubernetes.io/canary: "true"
alb.ingress.kubernetes.io/canary-by-header: "location"
alb.ingress.kubernetes.io/canary-by-header-value: "hz"
name: demo-canary
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- backend:
serviceName: demo-service-hello
servicePort: 80
path: /hello
pathType: ImplementationSpecific
-
指定された Cookie に基づいてカナリアトラフィックを分散する
|
パラメーター
|
Cookie の値
|
YAML の例
|
|
alb.ingress.kubernetes.io/canary-by-cookie
|
Cookie ベースのカナリアリリースはカスタム値をサポートしておらず、always と never のみです。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "2"
alb.ingress.kubernetes.io/canary: "true"
alb.ingress.kubernetes.io/canary-by-cookie: "demo"
name: demo-canary-cookie
... ...
|
リクエストに Cookie: demo=always ヘッダーが含まれている場合、ALB はトラフィックをカナリア Service にルーティングします。 ヘッダーに Cookie: demo=never が含まれている場合、ALB はトラフィックをカナリア Service にルーティングしません。
完全な YAML の例
Kubernetes 1.19 以降
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "2"
alb.ingress.kubernetes.io/canary: "true"
alb.ingress.kubernetes.io/canary-by-cookie: "demo"
name: demo-canary-cookie
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- backend:
service:
name: demo-service-hello
port:
number: 80
path: /hello
pathType: ImplementationSpecific
Kubernetes 1.19 より前
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "2"
alb.ingress.kubernetes.io/canary: "true"
alb.ingress.kubernetes.io/canary-by-cookie: "demo"
name: demo-canary-cookie
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- backend:
serviceName: demo-service-hello
servicePort: 80
path: /hello
pathType: ImplementationSpecific
-
重みによってトラフィックを分散する
|
パラメーター
|
説明
|
YAML の例
|
|
alb.ingress.kubernetes.io/canary-weight
|
カナリア Service にルーティングされるトラフィックの割合。 有効な値:0 ~ 100。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "3"
alb.ingress.kubernetes.io/canary: "true"
alb.ingress.kubernetes.io/canary-weight: "50"
name: demo-canary-weight
|
完全な YAML の例
Kubernetes 1.19 以降
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "3"
alb.ingress.kubernetes.io/canary: "true"
alb.ingress.kubernetes.io/canary-weight: "50"
name: demo-canary-weight
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- backend:
service:
name: demo-service-hello
port:
number: 80
path: /hello
pathType: ImplementationSpecific
Kubernetes 1.19 より前
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "3"
alb.ingress.kubernetes.io/canary: "true"
alb.ingress.kubernetes.io/canary-weight: "50"
name: demo-canary-weight
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- backend:
serviceName: demo-service-hello
servicePort: 80
path: /hello
pathType: ImplementationSpecific
アノテーションによるセッション維持の設定
次のアノテーションを使用して、ALB Ingress のセッション維持を設定します。
YAML の例
Kubernetes 1.19 以降
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-v3
annotations:
alb.ingress.kubernetes.io/sticky-session: "true"
alb.ingress.kubernetes.io/sticky-session-type: "Insert" # カスタム Cookie を使用するには、このアノテーションを Server に設定します。
alb.ingress.kubernetes.io/cookie-timeout: "1800"
alb.ingress.kubernetes.io/cookie: "test"
spec:
ingressClassName: alb
rules:
- http:
paths:
- backend:
service:
name: tea-svc
port:
number: 80
path: /tea2
pathType: ImplementationSpecific
- backend:
service:
name: coffee-svc
port:
number: 80
path: /coffee2
pathType: ImplementationSpecific
Kubernetes 1.19 より前
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: cafe-ingress-v3
annotations:
alb.ingress.kubernetes.io/sticky-session: "true"
alb.ingress.kubernetes.io/sticky-session-type: "Insert" # カスタム Cookie を使用するには、このアノテーションを Server に設定します。
alb.ingress.kubernetes.io/cookie-timeout: "1800"
alb.ingress.kubernetes.io/cookie: "test"
spec:
ingressClassName: alb
rules:
- http:
paths:
# コンテキストパスを設定します。
- path: /tea2
pathType: ImplementationSpecific
backend:
serviceName: tea-svc
servicePort: 80
# コンテキストパスを設定します。
- path: /coffee2
pathType: ImplementationSpecific
backend:
serviceName: coffee-svc
servicePort: 80
アノテーションの例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-v3
annotations:
alb.ingress.kubernetes.io/sticky-session: "true"
alb.ingress.kubernetes.io/sticky-session-type: "Server" # カスタム Cookie を使用するには、このアノテーションを Server に設定します。
alb.ingress.kubernetes.io/cookie-timeout: "1800"
alb.ingress.kubernetes.io/cookie: "test"
spec:
... ...
|
パラメーター
|
説明
|
デフォルト値
|
|
alb.ingress.kubernetes.io/sticky-session
|
セッション維持を有効にするかどうかを指定します。
-
true: セッション維持を有効にします。
-
false: セッション維持を無効にします。
|
false
|
|
alb.ingress.kubernetes.io/sticky-session-type
|
ロードバランサーが Cookie をどのように処理するかを指定します。
説明
alb.ingress.kubernetes.io/sticky-session が "true" に設定されている場合にのみ適用されます。 サーバーグループのパラメーターについては、「サーバーグループの作成」をご参照ください。
|
Insert
|
|
alb.ingress.kubernetes.io/cookie-timeout
|
Cookie のタイムアウト (秒)。 有効な値:1 ~ 86400。
alb.ingress.kubernetes.io/sticky-session-type が Insert に設定されている場合にのみ適用されます。
|
1000
|
|
alb.ingress.kubernetes.io/cookie
|
カスタム Cookie の値。
alb.ingress.kubernetes.io/sticky-session-type が Server に設定されている場合は必須 (空でない) です。
|
""
|
負荷分散アルゴリズムの指定
アノテーションを使用して、バックエンドサーバーグループの負荷分散アルゴリズムを指定します。
YAML の例
Kubernetes 1.19 以降
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/backend-scheduler: "uch" # 必要に応じて、これを wrr、sch、または wlc に設定します。
alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # このパラメーターは、負荷分散アルゴリズムが uch の場合にのみ必要です。wrr、sch、または wlc には必要ありません。
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80
Kubernetes 1.19 より前
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/backend-scheduler: "uch" # 必要に応じて、これを wrr、sch、または wlc に設定します。
alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # このパラメーターは、負荷分散アルゴリズムが uch の場合にのみ必要です。wrr、sch、または wlc には必要ありません。
name: cafe-ingress
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- backend:
serviceName: tea-svc
servicePort: 80
path: /tea
pathType: ImplementationSpecific
|
パラメーター
|
値
|
説明
|
|
|
alb.ingress.kubernetes.io/backend-scheduler
|
wrr
|
重み付きラウンドロビン。 重みが大きいサーバーほど多くのリクエストを受け取ります。 (デフォルト)
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/backend-scheduler: "uch" # 必要に応じて、これを wrr、sch、または wlc に設定します。
alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # このパラメーターは、負荷分散アルゴリズムが uch の場合にのみ必要です。wrr、sch、または wlc には必要ありません。
spec:
... ...
|
|
wlc
|
重みと現在の接続数に基づいてリクエストを分散します。 重みが等しい場合、接続数が最も少ないサーバーが選択されます。
|
|
sch
|
同じソース IP からのリクエストを同じバックエンドサーバーにルーティングします。
|
|
uch
|
指定された URL パラメーターのハッシュに基づいてリクエストをルーティングします。
ハッシュに使用する URL パラメーターを指定するには、alb.ingress.kubernetes.io/backend-scheduler-uch-value アノテーションを使用します。
|
CORS の設定
次のアノテーションを使用して、ALB Ingress のオリジン間リソース共有 (CORS) を設定します。
完全な YAML の例を表示するにはクリック
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
annotations:
alb.ingress.kubernetes.io/enable-cors: "true"
alb.ingress.kubernetes.io/cors-expose-headers: ""
alb.ingress.kubernetes.io/cors-allow-methods: "GET,POST"
alb.ingress.kubernetes.io/cors-allow-credentials: "true"
alb.ingress.kubernetes.io/cors-max-age: "600"
alb.ingress.kubernetes.io/cors-allow-origin: "許可されたオリジンドメイン名"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: cloud-nodeport
port:
number: 80
アノテーションの例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
annotations:
alb.ingress.kubernetes.io/enable-cors: "true"
alb.ingress.kubernetes.io/cors-expose-headers: ""
alb.ingress.kubernetes.io/cors-allow-methods: "GET,POST"
alb.ingress.kubernetes.io/cors-allow-credentials: "true"
alb.ingress.kubernetes.io/cors-max-age: "600"
alb.ingress.kubernetes.io/cors-allow-origin: "許可されたオリジンドメイン名"
spec:
... ...
|
パラメーター
|
説明
|
デフォルト値
|
|
alb.ingress.kubernetes.io/enable-cors
|
オリジン間リソース共有 (CORS) を有効にします。
|
デフォルト値: "false"
|
|
alb.ingress.kubernetes.io/cors-allow-origin
|
サーバー上のリソースにアクセスできるオリジンを指定します。
複数のオリジンを区切るにはカンマ (,) を使用します。 各値は http:// または https:// で始まり、その後に有効なドメイン名またはワイルドカードドメイン名が続く必要があります。 IP アドレスはサポートされていません。
|
|
|
alb.ingress.kubernetes.io/cors-allow-methods
|
クロスオリジンリクエストで許可される HTTP メソッドを指定します。
値は大文字と小文字を区別しません。 複数の HTTP メソッドを区切るにはカンマ (,) を使用します。
|
-
デフォルト値: GET, PUT, POST, DELETE, PATCH, OPTIONS
-
例: alb.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS"
|
|
alb.ingress.kubernetes.io/cors-allow-headers
|
クロスオリジンリクエストで許可されるリクエストヘッダーを指定します。
このパラメーターを * またはカンマ区切りのヘッダー値のリストに設定します。 各値には、大文字、小文字、数字のみを含めることができます。 値はアンダースコア (_) またはハイフン (-) で開始または終了することはできません。 単一の値の最大長は 32 文字です。
|
-
デフォルト値: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization
-
例: alb.ingress.kubernetes.io/cors-allow-headers: "X-Forwarded-For, X-app123-XPTO"
|
|
alb.ingress.kubernetes.io/cors-expose-headers
|
クライアントに公開するレスポンスヘッダーを指定します。
このパラメーターを * またはカンマ区切りのヘッダー値のリストに設定します。 各値には、大文字、小文字、数字のみを含めることができます。 値はアンダースコア (_) またはハイフン (-) で開始または終了することはできません。 単一の値の最大長は 32 文字です。
|
|
|
alb.ingress.kubernetes.io/cors-allow-credentials
|
クロスオリジンリクエストに認証情報を含めるかどうかを指定します。
|
|
|
alb.ingress.kubernetes.io/cors-max-age
|
プリフライト応答のキャッシュ期間 (秒)。 有効な値:0 ~ 172,800。
|
デフォルト値: 172800
|
バックエンドの持続的接続
バックエンドの持続的接続により、ALB はバックエンドサーバーへの TCP 接続を再利用でき、高スループットのシナリオでの接続オーバーヘッドを削減できます。
YAML の例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
annotations:
alb.ingress.kubernetes.io/backend-keepalive: "true"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: cloud-nodeport
port:
number: 80
|
パラメーター
|
説明
|
YAML の例
|
|
alb.ingress.kubernetes.io/backend-keepalive: "true"
|
バックエンドの持続的接続を有効にして、TCP 接続のオーバーヘッドを削減します。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
annotations:
alb.ingress.kubernetes.io/backend-keepalive: "true"
spec:
|
サーバーグループの IPv6 バックエンドアタッチメント
IPv6 バックエンドアタッチメントにより、サーバーグループに IPv4 と IPv6 の両方の Pod を含めることができますが、デュアルスタッククラスターが必要です。 「ACK マネージドクラスターの作成」をご参照ください。
説明
IPv6 バックエンドアタッチメントが有効な場合、次の制限が適用されます:
-
サーバーグループで IPv6 バックエンドアタッチメントを有効にするには、サーバーグループの VPC で IPv6 を有効にする必要があります。
-
カスタム転送アクションを使用してアタッチする場合、IP または Function Compute タイプのサーバーグループでは IPv6 バックエンドアタッチメントはサポートされていません。
-
Ingress が IPv4 のみの ALB インスタンスに関連付けられている場合、そのサーバーグループで IPv6 バックエンドアタッチメントを有効にすることはできません。
サンプル YAML
apiVersion: v1
kind: Service
metadata:
name: tea-svc
spec:
# デュアルスタックを設定するには、ipFamilyPolicy を RequireDualStack または PreferDualStack に設定し、ipFamilies で IPv4 と IPv6 の両方を指定します。
ipFamilyPolicy: RequireDualStack
ipFamilies:
- IPv4
- IPv6
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: tea
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: tea
spec:
replicas: 2
selector:
matchLabels:
app: tea
template:
metadata:
labels:
app: tea
spec:
containers:
- name: tea
image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
ports:
- containerPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/enable-ipv6: "true"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
Service と ALB Ingress をデュアルスタック用に設定します。 デュアルスタック ALB インスタンスを作成した後、IPv4 と IPv6 の両方のバックエンドサーバーをサーバーグループにアタッチできます。
|
設定オブジェクト
|
パラメーター
|
値
|
説明
|
YAML の例
|
|
Service
|
ipFamilies
|
|
Service で利用可能な IP アドレスタイプを指定します。
|
apiVersion: v1
kind: Service
metadata:
name: tea-svc
spec:
# デュアルスタックを設定するには、ipFamilyPolicy を RequireDualStack または PreferDualStack に設定し、ipFamilies で IPv4 と IPv6 の両方を指定します。
ipFamilyPolicy: RequireDualStack
ipFamilies:
- IPv4
- IPv6
... ...
|
|
ipFamilyPolicy
|
-
RequireDualStack
-
PreferDualStack
|
Service の IP ポリシーを設定し、デュアルスタックネットワーキングを有効にします。
|
|
ALB Ingress
|
alb.ingress.kubernetes.io/enable-ipv6
|
"true"
|
サーバーグループの IPv6 バックエンドアタッチメントを有効にします。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/enable-ipv6: "true"
spec:
... ...
|
QPS 制限の設定
次のアノテーションを追加して、転送ルールの QPS 制限を有効にします。
完全な YAML の例を表示
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/traffic-limit-qps: "50"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80
- path: /coffee
pathType: ImplementationSpecific
backend:
service:
name: coffee-svc
port:
number: 80
|
アノテーション
|
説明
|
YAML の例
|
|
alb.ingress.kubernetes.io/traffic-limit-qps
|
転送ルールの QPS 制限を指定します。 有効な値:1 ~ 1,000,000。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/traffic-limit-qps: "50"
spec:
... ...
|
スロースタート
スロースタートは、新しく追加された Pod へのトラフィックを徐々に増加させ、急激なトラフィックの急増による過負荷を防ぎます。
YAML の例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/slow-start-enabled: "true"
alb.ingress.kubernetes.io/slow-start-duration: "100"
name: alb-ingress
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
|
パラメーター
|
説明
|
YAML の例
|
|
alb.ingress.kubernetes.io/slow-start-enabled
|
スロースタートを有効にするかどうかを指定します。 デフォルトでは無効です。
-
true: スロースタート機能を有効にします。
-
false: スロースタート機能を無効にします。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/slow-start-enabled: "true"
alb.ingress.kubernetes.io/slow-start-duration: "100"
name: alb-ingress
... ...
|
|
alb.ingress.kubernetes.io/slow-start-duration
|
スロースタートのランプアップ期間 (秒)。 有効な値:30~900。 デフォルト値: 30。
|
接続ドレイン
Pod が Terminating 状態になると、ALB Ingress はそれをサーバーグループから削除しますが、既存の接続をすぐに閉じるわけではありません。これにより、リクエストエラーが発生したり、グレースフルシャットダウンが妨げられたりする可能性があります。 接続ドレインは、設定可能なタイムアウトまで既存の接続を開いたままにしてから閉じます。 「ALB Ingress で接続ドレインを使用してサービスをグレースフルにシャットダウンする」をご参照ください。
重要
ALB Ingress は、接続ドレインが完了するまで Pod が実行され続けることを保証しません。 終了中の Pod の可用性を制御するには、spec.terminationGracePeriodSeconds を設定するか、preStop フックを使用します。
YAML の例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/connection-drain-enabled: "true"
alb.ingress.kubernetes.io/connection-drain-timeout: "199"
name: alb-ingress
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
|
パラメーター
|
説明
|
YAML の例
|
|
alb.ingress.kubernetes.io/connection-drain-enabled
|
接続ドレインを有効にするかどうかを指定します。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/connection-drain-enabled: "true"
alb.ingress.kubernetes.io/connection-drain-timeout: "199"
name: alb-ingress
... ...
|
|
alb.ingress.kubernetes.io/connection-drain-timeout
|
接続ドレインのタイムアウトを秒単位で指定します。 有効な値:[0, 900]。 デフォルト値: 300。
|
クロス AZ 負荷分散の無効化
ALB はデフォルトでアベイラビリティゾーン間でトラフィックを分散します。 クロス AZ 負荷分散を無効にすると、トラフィックは同じゾーン内のバックエンドサービスに制限されます。
重要
クロス AZ 負荷分散を無効にする場合は、各アベイラビリティゾーンに十分なバックエンドリソースがあることを確認してください。
次の例を使用して、クロス AZ 負荷分散を無効にします:
完全な YAML の例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
namespace: default
annotations:
alb.ingress.kubernetes.io/cross-zone-enabled: "false"
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
|
パラメーター
|
説明
|
YAML の例
|
|
alb.ingress.kubernetes.io/cross-zone-enabled
|
クロス AZ 負荷分散を有効にするかどうかを指定します。 デフォルトで有効です。
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
namespace: default
annotations:
alb.ingress.kubernetes.io/cross-zone-enabled: "false"
... ...
|