複数のIngressパターン
同じEKSクラスター内で複数のIngressオブジェクトを活用することは一般的です。例えば、複数の異なるワークロードを公開するためなどです。デフォルトでは、各IngressはそれぞれALBの作成につながりますが、IngressGroup機能を活用することで複数のIngressリソースをグループ化できます。コントローラーはIngressGroup内のすべてのIngressのルールを自動的に統合し、1つのALBでそれらをサポートします。さらに、Ingressで定義されたほとんどのアノテーションは、そのIngressによって定義されたパスにのみ適用されます。
この例では、uiコンポーネントと同じALBを通してcatalog APIを公開し、パスベースのルーティングを活用して適切なKubernetesサービスにリクエストをディスパッチします。
まず、uiコンポーネントの新しいIngressを作成します:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ui-multi
namespace: ui
labels:
app.kubernetes.io/created-by: eks-workshop
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/healthcheck-path: /actuator/health/liveness
alb.ingress.kubernetes.io/group.name: retail-app-group
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ui
port:
number: 80
アノテーションalb.ingress.kubernetes.io/group.nameを追加してIngressGroupをretail-app-groupに設定します
rulesセクションは、ALBがトラフィックをどのようにルーティングすべきかを表現するために使用されます。uiコンポーネントでは、パス/で始まるすべてのHTTPリクエストをポート80のKubernetesサービスuiにルーティングします
次に、catalogコンポーネント用に別のIngressを作成します:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: catalog-multi
namespace: catalog
labels:
app.kubernetes.io/created-by: eks-workshop
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/healthcheck-path: /health
alb.ingress.kubernetes.io/group.name: retail-app-group
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /catalog
pathType: Prefix
backend:
service:
name: catalog
port:
number: 80
uiコンポーネントと同じIngressGroupを指定するには、アノテーションセクションでalb.ingress.kubernetes.io/group.nameをretail-app-groupに設定します
rulesセクションは、ALBがトラフィックをどのようにルーティングすべきかを表現するために使用されます。catalogコンポーネントでは、パス/catalogで始まるすべてのHTTPリクエストをポート80のKubernetesサービスcatalogにルーティングします
これらのマニフェストをクラスターに適用します:
これで、-multiで終わる2つの追加のIngressオブジェクトがクラスターに作成されます:
NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
catalog-multi catalog alb * k8s-retailappgroup-2c24c1c4bc-17962260.us-west-2.elb.amazonaws.com 80 2m21s
ui-multi ui alb * k8s-retailappgroup-2c24c1c4bc-17962260.us-west-2.elb.amazonaws.com 80 2m21s
ui ui alb * k8s-ui-ui-1268651632.us-west-2.elb.amazonaws.com 80 4m3s
両方のADDRESSが同じURLであることに注目してください。これは、これら2つのIngressオブジェクトが同じALBの背後にグループ化されているためです。
ALBリスナーを見て、これがどのように機能するか確認しましょう:
このコマンドの出力は次のことを示します:
- パスプレフィックス
/catalogを持つリクエストはcatalogサービスのターゲットグループに送信されます - それ以外はuiサービスのターゲットグループに送信されます
- デフォルトのバックアップとして、漏れたリクエストのために404があります
AWS consoleで新しいALB設定も確認できます:
EC2コンソールを開く
ロードバランサーのプロビジョニングが完了するまで待つには、次のコマンドを実行できます:
以前と同様にブラウザで新しいIngress URLにアクセスして、Webユーザーインターフェイスがまだ機能していることを確認してください:
http://k8s-retailappgroup-2c24c1c4bc-17962260.us-west-2.elb.amazonaws.com
次に、catalogサービスに向けたパスにアクセスしてみましょう:
catalogサービスからJSONペイロードが返されるでしょう。これは、同じALBを通じて複数のKubernetesサービスを公開できたことを示しています。