Ingress の作成
AWS Load Balancer Controller は Amazon EKS Auto Mode に含まれており、コントロールプレーンで実行されます。Ingress リソースを作成すると、自動的に AWS ロードバランサーがプロビジョニングされます。
現在、クラスターには Ingress リソースが存在しません。これは次のコマンドで確認できます:
No resources found in ui namespace.
まず、IngressClass と IngressClassParams を設定する必要があります:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: eks-auto-alb
annotations:
ingressclass.kubernetes.io/is-default-class: "true"
spec:
controller: eks.amazonaws.com/alb
parameters:
apiGroup: eks.amazonaws.com
kind: IngressClassParams
name: eks-auto-alb
---
apiVersion: eks.amazonaws.com/v1
kind: IngressClassParams
metadata:
name: eks-auto-alb
spec:
scheme: internet-facing
controller フィールドは、Auto Mode ALB 機能をターゲットにするために eks.amazonaws.com/alb に設定する必要があります
parameters セクションは、apiGroup: eks.amazonaws.com を持つ IngressClassParams リソースを参照します
IngressClassParams は、ロードバランサーのスキームやターゲットタイプなど、AWS 固有の設定を定義します
この IngressClass を使用して、Ingress を設定します:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ui-auto
namespace: ui
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/inbound-cidrs: $INBOUND_CIDRS
spec:
ingressClassName: eks-auto-alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ui
port:
number: 80
Ingress kind を使用します
ingressClassName は Auto Mode IngressClass を参照します
rules セクションは、パスが / で始まるすべての HTTP リクエストを、ポート 80 の ui という Kubernetes Service にルーティングします
EKS Auto Mode では、アノテーションによる ALB 設定はサポートされていません。設定は IngressClassParams で行う必要があります。
それでは、これらの設定を適用しましょう:
作成された Ingress オブジェクトを確認しましょう:
NAME CLASS HOSTS ADDRESS PORTS AGE
ui-auto eks-auto-alb * k8s-ui-uiauto-6cd0ef095e-78768930.us-west-2.elb.amazonaws.com 80 5s
ALB のプロビジョニングとターゲットの登録には数分かかるため、この Ingress 用にプロビジョニングされた ALB がどのように設定されているかを詳しく見てみましょう:
[
{"LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:1234567890:loadbalancer/app/k8s-ui-uiauto-cb8129ddff/f62a7bc03db28e7c",
"DNSName": "k8s-ui-ui-cb8129ddff-1888909706.us-west-2.elb.amazonaws.com",
"CanonicalHostedZoneId": "Z1H1FL5HABSF5",
"CreatedTime": "2022-09-30T03:40:00.950000+00:00",
"LoadBalancerName": "k8s-ui-ui-cb8129ddff",
"Scheme": "internet-facing",
"VpcId": "vpc-0851f873025a2ece5",
"State": {"Code": "active"
},
"Type": "application",
"AvailabilityZones": [
{"ZoneName": "us-west-2b",
"SubnetId": "subnet-00415f527bbbd999b",
"LoadBalancerAddresses": []
},
{"ZoneName": "us-west-2a",
"SubnetId": "subnet-0264d4b9985bd8691",
"LoadBalancerAddresses": []
},
{"ZoneName": "us-west-2c",
"SubnetId": "subnet-05cda6deed7f3da65",
"LoadBalancerAddresses": []
}
],
"SecurityGroups": [
"sg-0f8e704ee37512eb2",
"sg-02af06ec605ef8777"
],
"IpAddressType": "ipv4"
}
]
これから何がわかるでしょうか?
- ALB はパブリックインターネット経由でアクセス可能です
- VPC 内のパブリックサブネットを使用しています
コントローラーによって作成されたターゲットグループ内のターゲットを確認します:
{"TargetHealthDescriptions": [
{ "Target": {"Id": "10.42.180.183",
"Port": 8080,
"AvailabilityZone": "us-west-2c"
},
"HealthCheckPort": "8080",
"TargetHealth": {"State": "healthy"
}
}
]
}
Ingress オブジェクトで IP モードの使用を指定したため、ターゲットは ui Pod の IP アドレスとトラフィックを提供するポートを使用して登録されます。
このリンクをクリックして、コンソールで ALB とそのターゲットグループを確認することもできます:
EC2 コンソールを開く
このボタンを使用してコンソールを開く際に問題が発生した場合は、AWS コンソールのアクティブなセッションがない可能性があります。この問題を解決するには、ワークショップのホームページに移動し、左側のナビゲーションメニューの AWS account access セクションにある Open AWS console というリンクをクリックしてください。
Ingress リソースから URL を取得します:
http://k8s-ui-uiauto-cb8129ddff-1888909706.us-west-2.elb.amazonaws.com
ロードバランサーのプロビジョニングが完了するまで待つには、次のコマンドを実行します:
そして、Web ブラウザでアクセスしてください。Web ストアの UI が表示され、ユーザーとしてサイト内を移動できるようになります。
