ハイブリッドノードへのトラフィックのルーティング
これで、ハイブリッドノードインスタンスがクラスターに接続されたので、
以下のDeploymentとIngressマニフェストを使用してサンプルワークロードをデプロイできます:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: nginx-remote
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: eks.amazonaws.com/compute-type
operator: In
values:
- hybrid
containers:
- name: nginx
image: public.ecr.aws/nginx/nginx:1.26
volumeMounts:
- name: workdir
mountPath: /usr/share/nginx/html
resources:
requests:
cpu: 200m
limits:
cpu: 200m
ports:
- containerPort: 80
initContainers:
- name: install
image: busybox:1.28
command: [ "sh", "-c"]
args:
- 'echo "Connected to $(POD_IP) on $(NODE_NAME)" > /work-dir/index.html'
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
volumeMounts:
- name: workdir
mountPath: "/work-dir"
volumes:
- name: workdir
emptyDir: {}
nodeAffinityルールを使用して、Kubernetesスケジューラーにeks.amazonaws.com/compute-type=hybridラベルと値を持つクラスターノードを_優先_するように指示します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx
namespace: nginx-remote
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
ingressリソースは、AWSロードバランサー(ALB)を構成してワークロードポッドにトラフィックをルーティングします。
ワークロードをデプロイしましょう:
namespace/nginx-remote created
service/nginx created
deployment.apps/nginx created
ingress.networking.k8s.io/nginx created
ポッドが正常にハイブリッドノードにスケジュールされたことを確認しましょう:
NAME NODE
nginx-787d665f9b-2bcms mi-027504c0970455ba5
nginx-787d665f9b-hgrnp mi-027504c0970455ba5
nginx-787d665f9b-kv4x9 mi-027504c0970455ba5
素晴らしい!予想通り、3つのnginxポッドはハイブリッドノード上で実行されています。
ALBのプロビジョニングには数分かかる場合があります。続行する前に、次のコマンドでロードバランサーのプロビジョニングが完了したことを確認してください:
"active"
ALBがアクティブになったら、IngressのAssociatedのAddressを確認してALBのURLを取得できます:
k8s-nginxrem-nginx-03efa1e84c-012345678.us-west-2.elb.amazonaws.com
ALB URLを使って、コマンドラインからアクセスするか、ウェブブラウザにアドレスを入力してデプロイメントにアクセスできます。ALBはIngressルールに基づいて適切なポッドにトラフィックをルーティングします。
Connected to 10.53.0.5 on mi-027504c0970455ba5
curlまたはブラウザからの出力には、mi-プレフィックスを持つハイブリッドノード上で実行されているロードバランサーからのリクエストを受信するポッドの10.53.0.XのIPアドレスが表示されます。
curlコマンドを数回再実行するか、ブラウザを更新して、各リクエストでポッドのIPが変化し、ノード名は同じままであることに注目してください。これは、すべてのポッドが同じリモートノード上でスケジュールされているためです。
Connected to 10.53.0.5 on mi-027504c0970455ba5
Connected to 10.53.0.11 on mi-027504c0970455ba5
Connected to 10.53.0.84 on mi-027504c0970455ba5
ハイブリッドノードへのワークロードのデプロイ、ALBを通じてアクセスできるよう構成、およびトラフィックがリモートノードで実行されているポッドに適切にルーティングされていることを確認することに成功しました。
EKSハイブリッドノードでさらに多くのユースケースを探索する前に、少しクリーンアップをしましょう。