- 印刷する
- PDF
ALB Ingress Controller のユースケース
- 印刷する
- PDF
VPC環境で利用できます。
Ncloud Kubernetes Serviceでは、Serviceと Ingressにアノテーションを追加することで、様々なルーティング戦略を実装できます。このガイドでは、ALB Ingress Controller設定を基に使用できるユースケースを提供します。
ユースケース用ワークロードのインストール
ユースケース用の Deploymentと Serviceは下記のコマンドを実行してインストールできます。コマンドを実行すると、「naver」、「cloud」、「platform」という名前の Deploymentと Serviceが作成されます:
kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/main/docs/ja/examples/pub/nks-alb-ingress-sample-services.yaml
ALB Ingress Controller のユースケース
パスベースルーティングのユースケース
このユースケースは、リクエストを指定されたパスに応じて異なるサービスにルーティングする方法を示しています。/naverパスに入るリクエストは naverサービスにルーティングされ、/cloudパスに入るリクエストは cloudサービスにルーティングされます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: path-ingress
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /naver
pathType: Prefix
backend:
service:
name: naver
port:
number: 80
- path: /cloud
pathType: Prefix
backend:
service:
name: cloud
port:
number: 80
ホストベースルーティングのユースケース
このユースケースは、リクエストを指定されたホストに応じて異なるサービスにルーティングする方法を示しています。svc.naver.comホストに入るすべてのリクエストは naverサービスにルーティングされ、svc.cloud.comホストに入るすべてのリクエストは cloudサービスにルーティングされます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: host-ingress
spec:
ingressClassName: alb
rules:
- host: svc.naver.com
http:
paths:
- path: /*
pathType: Prefix
backend:
service:
name: naver
port:
number: 80
- host: svc.cloud.com
http:
paths:
- path: /*
pathType: Prefix
backend:
service:
name: cloud
port:
number: 80
HTTPヘッダベースルーティングのユースケース
このユースケースは、HTTPヘッダ値をベースにトラフィックをルーティングする方法を示しています。 alb.ingress.kubernetes.io/conditions アノテーションを使用して HTTPヘッダルールを定義します。以下の場合、「HeaderName」という HTTPヘッダに「HeaderValue1」または「HeaderValue2」値が含まれているリクエストのみ、NAVERサービスにルーティングされます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: condition-ingress
annotations:
alb.ingress.kubernetes.io/conditions.naver: >
[{"field":"httpHeader","httpHeader":{"key": "HeaderName", "values":["HeaderValue1", "HeaderValue2"]}}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /*
pathType: Prefix
backend:
service:
name: naver
port:
number: 80
Serviceの Port Nameのユースケース
Ingressルールでサービスのポート名(port.name)を使用してトラフィックルーティングルールを定義できます。このため、サービス定義時に port.nameを明示的に指定する必要があります。このユースケースでは、NAVERサービスのポートに http-webと名前を指定して Ingressルールで参照します。
apiVersion: v1
kind: Service
metadata:
name: naver
spec:
ports:
- name: http-web
nodePort: 30080
port: 80
protocol: TCP
targetPort: 80
selector:
app: naver
type: NodePort
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: portname-ingress
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /naver
pathType: Prefix
backend:
service:
name: naver
port:
name: http-web
HTTPを HTTPSにリダイレクトするユースケース
このユースケースでは、ssl-redirectアノテーションを活用して HTTPに入るトラフィックを HTTPSにリダイレクトする方法を示しています。ユースケースを実行するには、以下の要素が必要です。
- ドメイン
- Certificate Managerに登録された当該ドメインの証明書
HTTP(80)に入るトラフィックを HTTPS(443)にリダイレクトするには、下記のユースケースのように Ingressを作成します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS":443}]'
alb.ingress.kubernetes.io/ssl-certificate-no: "1004"
alb.ingress.kubernetes.io/ssl-redirect: "443"
name: redirect-ingress
spec:
ingressClassName: alb
defaultBackend:
service:
name: cloud
port:
number: 80
以下は、上記の設定で80ポートを443ポートにリダイレクトするために2つのポートを登録する部分です。
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS":443}]'
以下は、上記の設定で HTTPSリスナーに登録する証明書番号を示す部分です。
alb.ingress.kubernetes.io/ssl-certificate-no: "1004"
参考証明書番号は Resource Managerの nrnで確認できます。(例: nrn:PUB:CertificateManager::000:Certificate/External/${certificateNo})
以下は、上記の設定でリダイレクトするポートを登録する部分です。
alb.ingress.kubernetes.io/ssl-redirect: "443"
マルチ証明書のユースケース
ロードバランサに複数の証明書を登録できます。このユースケースでは、デフォルト(default)証明書と追加証明書を設定する方法を示しています。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS":443}]'
alb.ingress.kubernetes.io/ssl-certificate-no: "1234, 1004"
alb.ingress.kubernetes.io/ssl-redirect: "443"
name: multi-ssl-ingress
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /*
pathType: Prefix
backend:
service:
name: naver
port:
number: 80
以下は、上記の設定で証明書を登録する部分です。最初の証明書がデフォルト証明書として追加され、残りの証明書は追加証明書として設定されます。
alb.ingress.kubernetes.io/ssl-certificate-no: "1234, 1004"
actionによる重み付けベースルーティングのユースケース
このユースケースでは、Ingressルールと一緒にアノテーションを使用して、特定のパスに対するトラフィックの処理方法を定義します。/navercloudのパスに対してアノテーションでトラフィックが naverと cloudサービスに分散されるように設定されます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: action-ingress
annotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]'
alb.ingress.kubernetes.io/description: 'alb ingress controller'
alb.ingress.kubernetes.io/actions.navercloud: >
{"type":"targetGroup","targetGroup":{"targetGroups":[{"serviceName":"naver","servicePort":80,"weight":50},{"serviceName":"cloud","servicePort":80,"weight":50}]}}
spec:
ingressClassName: alb
defaultBackend:
service:
name: naver
port:
number: 80
rules:
- http:
paths:
- path: /platform
pathType: Prefix
backend:
service:
name: platform
port:
number: 80
- path: /navercloud
pathType: Exact
backend:
service:
name: navercloud
port:
name: use-annotation
- 以下は、上記の設定でトラフィックを naverと cloudサービスに分散する部分です。
alb.ingress.kubernetes.io/actions.navercloud: > {"type":"targetGroup","targetGroup":{"targetGroups":[{"serviceName":"naver","servicePort":80,"weight":50},{"serviceName":"cloud","servicePort":80,"weight":50}]}}
- アノテーションを適用するには、Ingress仕様内で定義されたパスと actions.${actionName}の actionNameが一致する必要があります。
conditionによる条件追加のユースケース
このユースケースでは、Ingressルールと一緒にアノテーションを使用して、特定のパスに対する条件を追加する方法を定義します。仕様内部に記載されたルールで、/naverのパスに対して naverサービスにルーティングし、アノテーションで条件を追加します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: condition-ingress
annotations:
alb.ingress.kubernetes.io/conditions.naver: >
[{"field":"hostHeader","hostHeader":{"values":["svc.naver.com"]}},{"field":"pathPattern","pathPattern":{"values":["/cloud"]}}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /naver
pathType: Prefix
backend:
service:
name: naver
port:
number: 80
- 以下は、上記の設定で svc.naver.comホストヘッダ条件と追加パスを適用する部分です。
alb.ingress.kubernetes.io/conditions.naver: > [{"field":"hostHeader","hostHeader":{"values":["svc.naver.com"]}},{"field":"pathPattern","pathPattern":{"values":["/cloud"]}}]
- アノテーションを適用するには、Ingress仕様内で定義されたパスと conditions.${conditionName}の conditionNameが一致する必要があります。
ターゲットグループ別ヘルスチェックパス設定のユースケース
アノテーションの適用対象が Ingress、Serviceの場合、そのアノテーションは2つのリソースタイプで使用できます。同じアノテーションが Ingress、Serviceに存在する場合、Serviceに適用されたアノテーションが優先的に適用されます。
このユースケースでは、パス別に登録されたサービスのヘルスチェックをそれぞれ別々に設定します。各サービスの特定のヘルスチェック設定は、サービスのアノテーションを通じて実装されます。
# naver-service.yaml
apiVersion: v1
kind: Service
metadata:
annotations:
alb.ingress.kubernetes.io/healthcheck-path: /naver
name: naver
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: naver
type: NodePort
---
# cloud-service.yaml
apiVersion: v1
kind: Service
metadata:
annotations:
alb.ingress.kubernetes.io/healthcheck-path: /cloud
name: cloud
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: cloud
type: NodePort
---
# healthcheck-alb.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: healthcheck-alb
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]'
alb.ingress.kubernetes.io/healthcheck-path: "/"
spec:
defaultBackend:
service:
name: platform
port:
number: 80
rules:
- http:
paths:
- path: /naver
pathType: Prefix
backend:
service:
name: naver
port:
number: 80
- path: /cloud
pathType: Prefix
backend:
service:
name: cloud
port:
number: 80
- 以下は、上記の設定で /naverのパスにルーティングされるターゲットグループのヘルスチェック条件です。ターゲットグループごとに特定のヘルスチェック条件を適用したい場合、これらの設定は当該サービスのアノテーションを通じて定義する必要があります。
alb.ingress.kubernetes.io/healthcheck-path: /naver
Sticky Session指定のユースケース
ロードバランサの Sticky Sessionは、リスナーのルールで設定可能な Sticky Session機能とターゲットグループで設定可能な Sticky Session機能で提供されます。
このユースケースでは、作成されるすべてのターゲットグループの Sticky Sessionを設定し、actionで作成されたルールの Sticky Sessionを使用するように設定します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sticky-ingress
annotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]'
alb.ingress.kubernetes.io/enable-sticky-session: 'true'
alb.ingress.kubernetes.io/actions.targets: >
{"type":"targetGroup","targetGroup":{"targetGroups":[{"serviceName":"naver","servicePort":80,"weight":50},{"serviceName":"cloud","servicePort":80,"weight":50}],"enableStickySession":true}}
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /navercloud
pathType: Prefix
backend:
service:
name: targets
port:
name: use-annotation
- path: /platform
pathType: Prefix
backend:
service:
name: platform
port:
number: 80
- 以下は、上記の設定でターゲットグループの Sticky Sessionを使う部分です。
alb.ingress.kubernetes.io/enable-sticky-session: 'true'
- 以下は、上記の設定で/navercloudのパスに入るリクエストに Sticky Sessionを使う部分です。
alb.ingress.kubernetes.io/actions.targets: > {"type":"targetGroup","targetGroup":{"targetGroups":[{"serviceName":"naver","servicePort":80,"weight":50},{"serviceName":"cloud","servicePort":80,"weight":50}],"enableStickySession":true}}