EKSクラスタ上のAWS負荷バランサコントローラ
24111 ワード
Allアプリケーション/ネットワーク負荷バランサを統合するために、EWSクラスタ上でAWS負荷バランサコントローラを有効にする方法を見てみましょう.KubernetesクラスタとのAWSロードバランサの統合のユースケース&ソリューションを提供するためのガイドです. Kubernetes Networking Application Load Balancer
AWS Load Balancer Controller on EKS Cluster Creating an EKS Cluster Install the AWS Load Balancer Controller Deploy the Ingress
Patterns Application Load Balancer - Traffic Routing Ingress Group - Multiple Ingress Resources Together Custom Domain & SSL Certificate HTTPS Redirect Access Control Custom Attributes & Addons Conclusion
クベルネッツネットワーク
我々は、Kubernetesネットワークの高レベルの概要から始めます.Kubernetesは、ロードバランサ、イングル/出口ゲートウェイ、ネットワークセキュリティポリシー、クラスタ内のトラフィックルーティング、相互TLS認証などのアプリケーションを展開するために必要なすべてのコンポーネントを持っています.
Ingress そして、クラスタの外からのHTTPとHTTPSルートをservices クラスタ内で.トラフィックルーティングは、Ingressリソースで定義された規則によって制御されます.侵入はサービスに外部到達可能なURLを与えるために構成されるかもしれません、ロードバランス交通、SSL/TLSを終えて、名前ベースの仮想ホスティングを提供してください.角Ingress controller それはまた、トラフィックを処理するためにあなたのエッジルータや追加のフロントエンドを構成することがありますが、通常は、負荷バランサを使用して、インクルードを満たすために責任があります.
アプリケーションロード
アプリケーション負荷バランサは、アプリケーション層(OSI)モデルの第7の層で機能する.ロードバランサが要求を受信したあと、それは適用する規則を決定するために優先順位のリスナー規則を評価して、それから規則アクションのために目標グループから目標を選ぶ.アプリケーションのトラフィックの内容に基づいて、異なるターゲットグループへのルート要求にリスナー規則を設定できます.ターゲットは複数のターゲットグループに登録されている場合でも、各ターゲットグループごとに独立して実行される.
あなたのアプリケーションに要求の全体的な流れを混乱させることなく、お客様のニーズの変更として負荷バランサーからターゲットを追加して削除することができます.弾性ロードバランシングは、時間とともにあなたのアプリケーション変化へのトラフィックとしてあなたのロードバランサを評価します.弾性ロードバランシングは、自動的にワークロードの大多数にスケールすることができます.
ALBは、ホストまたはパスベースのルーティング、TLS(トランスポート層セキュリティ)終了、WebSocket、HTTP/2、AWS WAF(Webアプリケーションファイアウォール)の統合、統合アクセスログ、およびヘルスチェックを含む複数の機能をサポートしています.
EKSクラスタ上のAWS負荷バランサコントローラ
AWS負荷バランサコントローラはKubernetesクラスタ用のAWS弾性負荷バランサを管理するAWSロードバランサコントローラをインストールするとき、コントローラは動的に準備します あなたがクバーネッツ侵入をつくるとき、AWSアプリケーションロードバランサー 型負荷バランサのKubernetesサービスを作成するAWSネットワークロードバランサ(NLB). ターゲット型-インスタンスターゲットとIPターゲットのいずれかを設定できます.
写真https://aws.amazon.com/blogs/opensource/kubernetes-ingress-aws-alb-ingress-controller/ Kubernetes APIでイングルリソースが作成されると、ALB Ingress Controllerは変更を監視します. ALB入口コントローラは、Ingressリソースに追加された注釈に基づいてAWSアプリケーションロードバランサを作成します. ターゲットグループは、Ingressリソースで指定されたバックエンドごとに作成されます. アプリケーションロードバランサURLは、パスまたはクエリパームでアクセスされます. Intressリソースで構成された規則に基づいて、リクエストは特定のターゲットグループにリダイレクトされ、CLIP
EKSクラスタの作成
EKSクラスタから始めましょう.EWSコンソールまたはEksctlツールを使用してEKSクラスタを展開できます.このブログ記事では、EKSCTLツールを使ってEKSクラスタを作成します.
AWSロードバランサコントローラ
EKSチャートレポをヘルムに加えてください
AWS Load Balancer Controller Crds - IngressクラスParamsとターゲットグループバインディングをインストールします
サービスアカウントを渡すことでヘルムチャートをインストールします.false ADNサービスアカウントを作成します.名前= AWS負荷バランサコントローラ
イングルを展開する
AWSアプリケーションロードバランサ(ALB)は、Ingressオブジェクトを作成するまで作成されません.ここでサンプル展開ファイルを展開し、Ingressオブジェクトを使用して公開します.
注:このブログはKubernetes 1.21 +使用してイングルのオブジェクトが更新されます.ALBコントローラのドキュメントを見ているなら、Ingressオブジェクトのいくつかの違いを見ることができます.
パターン
アプリケーションロードバランサ
このingressオブジェクトでは、追加されたリソースタグでアプリケーション負荷バランサに直面しているインターネットを設定しています.規則では、パスがプレフィックスエコーを持つ場合、バックエンドサービスはエコーサーバであり、ポート番号は80です.
ingressグループ-一緒に複数の摂取リソース
IngressGroup機能を使用すると、グループの複数のイングルのリソースを一緒にすることができます.コントローラは自動的にingressgroup内のすべてのドレスのingressルールをマージし、単一のALBをサポートします.さらに、ingressで定義されたほとんどの注釈は、そのイングルによって定義されたパスにのみ適用されます.
まず、別のイングルリソースを作成し、別のアプリケーションロードバランサを作成するかどうかを確認します.
カスタムドメインとSSL証明書
さて、カスタムドメインをALBとSSL証明書にバインドしましょう.SSL証明書をバインドできる2つの方法があります
注釈からの証明書の設定alb.ingress.kubernetes.io/certificate-arn AWS証明書マネージャが管理する1つ以上の証明書のarnを指定します
ドメイン名を使用してSSL証明書の自動発見を設定できます.
ALBリスナーのためのTLS証明書は、自動的にIngressリソースからホスト名で発見されることができます
コントローラは、TLS証明書を
この例では、SSL証明書の自動発見を設定します.
HTTPSリダイレクト
HTTPプロトコルのURLはHTTPSプロトコルにリダイレクトするべきです.私たちはalb.ingress.kubernetes.io/actions.${action-name} HTTPトラフィックをhttpsにリダイレクトするイングルを設定する注釈
アクセス制御
ロードバランサのアクセス制御は以下の注釈で制御できる.
カスタム属性とアドオン
バランサを読み込むカスタム属性は注釈を使用して制御できます.
アプリケーションロードバランサでhttp 2を有効にするために
WAFをアタッチしたり、AngressオブジェクトをアンダーバランサにAWSシールドを有効にすることができます.
結論
AWS負荷バランサコントローラは、Kubernetesクラスタで実行されているアプリケーションへのルートトラフィックを構成する弾性ロードバランサを構成し、管理するためにKubernetes固有の方法を提供します.私は、私はあなたにルーティング、ingressグループ、SSL、HTTP HTTPSリダイレクションへのHTTP、および他の先進概念の概念を説明しました.ドキュメントの詳細をチェックすることができますhere . 私は非常にあなたがそれを試して共有するフィードバックと質問を与えることを奨励
私はsiva - Srとして働いていますComputer Enterprises Inc オーランドから.私はAWSコミュニティビルダー、Auth 0大使と私は雲、コンテナ、IOT、およびdevopsについて多くを書くつもりです.もし興味があれば、あなたがもういないなら私についてきてください.私にTwitterをフォローしたり、私のブログをチェックアウトhttps://blog.sivamuthukumar.com
AWS Load Balancer Controller on EKS Cluster
Patterns
クベルネッツネットワーク
我々は、Kubernetesネットワークの高レベルの概要から始めます.Kubernetesは、ロードバランサ、イングル/出口ゲートウェイ、ネットワークセキュリティポリシー、クラスタ内のトラフィックルーティング、相互TLS認証などのアプリケーションを展開するために必要なすべてのコンポーネントを持っています.
Ingress そして、クラスタの外からのHTTPとHTTPSルートをservices クラスタ内で.トラフィックルーティングは、Ingressリソースで定義された規則によって制御されます.侵入はサービスに外部到達可能なURLを与えるために構成されるかもしれません、ロードバランス交通、SSL/TLSを終えて、名前ベースの仮想ホスティングを提供してください.角Ingress controller それはまた、トラフィックを処理するためにあなたのエッジルータや追加のフロントエンドを構成することがありますが、通常は、負荷バランサを使用して、インクルードを満たすために責任があります.
アプリケーションロード
アプリケーション負荷バランサは、アプリケーション層(OSI)モデルの第7の層で機能する.ロードバランサが要求を受信したあと、それは適用する規則を決定するために優先順位のリスナー規則を評価して、それから規則アクションのために目標グループから目標を選ぶ.アプリケーションのトラフィックの内容に基づいて、異なるターゲットグループへのルート要求にリスナー規則を設定できます.ターゲットは複数のターゲットグループに登録されている場合でも、各ターゲットグループごとに独立して実行される.
あなたのアプリケーションに要求の全体的な流れを混乱させることなく、お客様のニーズの変更として負荷バランサーからターゲットを追加して削除することができます.弾性ロードバランシングは、時間とともにあなたのアプリケーション変化へのトラフィックとしてあなたのロードバランサを評価します.弾性ロードバランシングは、自動的にワークロードの大多数にスケールすることができます.
ALBは、ホストまたはパスベースのルーティング、TLS(トランスポート層セキュリティ)終了、WebSocket、HTTP/2、AWS WAF(Webアプリケーションファイアウォール)の統合、統合アクセスログ、およびヘルスチェックを含む複数の機能をサポートしています.
EKSクラスタ上のAWS負荷バランサコントローラ
AWS負荷バランサコントローラはKubernetesクラスタ用のAWS弾性負荷バランサを管理するAWSロードバランサコントローラをインストールするとき、コントローラは動的に準備します
写真https://aws.amazon.com/blogs/opensource/kubernetes-ingress-aws-alb-ingress-controller/
EKSクラスタの作成
EKSクラスタから始めましょう.EWSコンソールまたはEksctlツールを使用してEKSクラスタを展開できます.このブログ記事では、EKSCTLツールを使ってEKSクラスタを作成します.
➜ eksctl create cluster -f cluster.yaml
クラスタYAML設定は以下の通りです.apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: app-lb-demo
region: us-east-1
iam:
withOIDC: true
serviceAccounts:
- metadata:
name: aws-load-balancer
namespace: kube-system
wellKnownPolicies:
awsLoadBalancerController: true
managedNodeGroups:
- name: app-lb-demo-ng
instanceType: t3.medium
minSize: 1
maxSize: 2
AWSロードバランサコントローラ
EKSチャートレポをヘルムに加えてください
helm repo add eks https://aws.github.io/eks-charts
AWS Load Balancer Controller Crds - IngressクラスParamsとターゲットグループバインディングをインストールします
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"
サービスアカウントを渡すことでヘルムチャートをインストールします.false ADNサービスアカウントを作成します.名前= AWS負荷バランサコントローラ
helm install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=<cluster-name> --set serviceAccount.create=false --set serviceAccount.name=aws-load-balancer
イングルを展開する
AWSアプリケーションロードバランサ(ALB)は、Ingressオブジェクトを作成するまで作成されません.ここでサンプル展開ファイルを展開し、Ingressオブジェクトを使用して公開します.
注:このブログはKubernetes 1.21 +使用してイングルのオブジェクトが更新されます.ALBコントローラのドキュメントを見ているなら、Ingressオブジェクトのいくつかの違いを見ることができます.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.0.0/docs/examples/echoservice/echoserver-namespace.yaml &&\
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.0.0/docs/examples/echoservice/echoserver-service.yaml &&\
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.0.0/docs/examples/echoservice/echoserver-deployment.yaml
namespace/echoserver created
service/echoserver created
deployment.apps/echoserver created
パターン
アプリケーションロードバランサ
このingressオブジェクトでは、追加されたリソースタグでアプリケーション負荷バランサに直面しているインターネットを設定しています.規則では、パスがプレフィックスエコーを持つ場合、バックエンドサービスはエコーサーバであり、ポート番号は80です.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: echoserver
namespace: echoserver
annotations:
**kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/tags: Environment=dev,Team=app**
spec:
rules:
- host: "*.amazonaws.com"
http:
paths:
- path: /echo
pathType: Prefix
backend:
service:
name: echoserver
port:
number: 80
インクルードが確認され、ALBが準備されることを確認します.ALBがプロポーズされると、ALBアドレスを取得します.➜ flux-demo k get ingress -A
NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
echoserver echoserver <none> *.amazonaws.com k8s-echoserv-echoserv-xxxxxxxxxxxxxxxxxxxxx.us-east-1.elb.amazonaws.com 80 10s
URLとパスにリクエストを行い、期待されたレスポンスを受け取るかどうかを確認します.➜ flux-demo curl http://k8s-echoserv-echoserv-xxxxxxxxxxxxxxxxxxxxx.us-east-1.elb.amazonaws.com/echo -i
HTTP/1.1 200 OK
Date: Thu, 02 Sep 2021 02:41:57 GMT
Content-Type: text/plain
Transfer-Encoding: chunked
Connection: keep-alive
Server: nginx/1.10.0
ingressグループ-一緒に複数の摂取リソース
IngressGroup機能を使用すると、グループの複数のイングルのリソースを一緒にすることができます.コントローラは自動的にingressgroup内のすべてのドレスのingressルールをマージし、単一のALBをサポートします.さらに、ingressで定義されたほとんどの注釈は、そのイングルによって定義されたパスにのみ適用されます.
まず、別のイングルリソースを作成し、別のアプリケーションロードバランサを作成するかどうかを確認します.
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: echoserver-1
namespace: echoserver
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/tags: Environment=dev,Team=app
spec:
rules:
- host: "*.amazonaws.com"
http:
paths:
**- path: /echo-test**
pathType: Prefix
backend:
service:
name: echoserver
port:
number: 80
イングルが作成されたことを確認し、別のalb - getプロビジョニングを見ることができます.それで、我々は異なるアドレスで2つのALBSを得ました.➜ flux-demo k get ingress -A
NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
echoserver echoserver <none> *.amazonaws.com k8s-echoserv-echoserv-64b6592087-xxxxxxxxx.us-east-1.elb.amazonaws.com 80 28m
echoserver echoserver-1 <none> *.amazonaws.com k8s-echoserv-echoserv-6c350fcfc9-xxxxxxxxx.us-east-1.elb.amazonaws.com 80 2m39s
を加えましょう[alb.ingress.kubernetes.io/group.name](http://alb.ingress.kubernetes.io/group.name)
同じ値を持つ両方のingressオブジェクトannotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/tags: Environment=dev,Team=app
alb.ingress.kubernetes.io/group.name: alb-demo-group
いったんイングルを適用すると(削除と再作成-簡単なチェックのために)、両方のingeachが同じALBアドレスを持つのを見ることができます.➜ flux-demo k get ingress -A
NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
echoserver echoserver <none> *.amazonaws.com k8s-albdemogroup-5364dc26a8-xxxxxxxxx.us-east-1.elb.amazonaws.com 80 5s
echoserver echoserver-1 <none> *.amazonaws.com k8s-albdemogroup-5364dc26a8-xxxxxxxxx.us-east-1.elb.amazonaws.com 80 5s
ルールはマージされ、アプリケーションロードバランサコントローラで設定するには、グループ内の規則の順序を適用できます.カスタムドメインとSSL証明書
さて、カスタムドメインをALBとSSL証明書にバインドしましょう.SSL証明書をバインドできる2つの方法があります
注釈からの証明書の設定alb.ingress.kubernetes.io/certificate-arn AWS証明書マネージャが管理する1つ以上の証明書のarnを指定します
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:xxxxx:certificate/xxxxxxx
ドメイン名を使用してSSL証明書の自動発見を設定できます.
ALBリスナーのためのTLS証明書は、自動的にIngressリソースからホスト名で発見されることができます
[alb.ingress.kubernetes.io/certificate-arn](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/ingress/annotations/#certificate-arn)
注釈は指定しません.コントローラは、TLS証明書を
tls
イングル・アンド・ノhost
侵入規則におけるへん場apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: echoserver
namespace: echoserver
annotations:
**kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/tags: Environment=dev,Team=app**
spec:
rules:
- host: "dev.spectaflare.com"
http:
paths:
- path: /echo
pathType: Prefix
backend:
service:
name: echoserver
port:
number: 80
curlコマンドを実行します.➜ flux-demo curl https://dev.spectaflare.com/echo -i
HTTP/1.1 200 OK
HTTPSリダイレクト
HTTPプロトコルのURLはHTTPSプロトコルにリダイレクトするべきです.私たちはalb.ingress.kubernetes.io/actions.${action-name} HTTPトラフィックをhttpsにリダイレクトするイングルを設定する注釈
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: echoserver
namespace: echoserver
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/tags: Environment=dev,Team=app
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
alb.ingress.kubernetes.io/ssl-redirect: '443'
spec:
rules:
- host: "dev.sivamuthukumar.com"
http:
paths:
- path: /echo
pathType: Prefix
backend:
service:
name: echoserver
port:
number: 80
アクセス制御
ロードバランサのアクセス制御は以下の注釈で制御できる.
alb.ingress.kubernetes.io/scheme: internal # To enable the internal load balancers
alb.ingress.kubernetes.io/inbound-cidrs: 10.0.0.0/24 # Inbound CIDRs from your network or VPC
alb.ingress.kubernetes.io/security-groups: sg-xxxx, sg-yyyy # Security groups you want to attach the load balancer
カスタム属性とアドオン
バランサを読み込むカスタム属性は注釈を使用して制御できます.
alb.ingress.kubernetes.io/load-balancer-attributes
アプリケーションロードバランサでhttp 2を有効にするために
alb.ingress.kubernetes.io/load-balancer-attributes: routing.http2.enabled=true
注釈を追加する他の属性をチェックしますhere .WAFをアタッチしたり、AngressオブジェクトをアンダーバランサにAWSシールドを有効にすることができます.
alb.ingress.kubernetes.io/wafv2-acl-arn: <WAFv2 ACL ARN HERE>
alb.ingress.kubernetes.io/shield-advanced-protection: 'true'
結論
AWS負荷バランサコントローラは、Kubernetesクラスタで実行されているアプリケーションへのルートトラフィックを構成する弾性ロードバランサを構成し、管理するためにKubernetes固有の方法を提供します.私は、私はあなたにルーティング、ingressグループ、SSL、HTTP HTTPSリダイレクションへのHTTP、および他の先進概念の概念を説明しました.ドキュメントの詳細をチェックすることができますhere . 私は非常にあなたがそれを試して共有するフィードバックと質問を与えることを奨励
私はsiva - Srとして働いていますComputer Enterprises Inc オーランドから.私はAWSコミュニティビルダー、Auth 0大使と私は雲、コンテナ、IOT、およびdevopsについて多くを書くつもりです.もし興味があれば、あなたがもういないなら私についてきてください.私にTwitterをフォローしたり、私のブログをチェックアウトhttps://blog.sivamuthukumar.com
Reference
この問題について(EKSクラスタ上のAWS負荷バランサコントローラ), 我々は、より多くの情報をここで見つけました https://dev.to/aws-builders/aws-load-balancer-controller-on-eks-cluster-38fkテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol