クラスターレベルの Ingress コントローラーを使用して、トラフィックを Amazon Elastic Kubernetes Service (EKS) 上の ArcGIS Enterprise デプロイメントにルーティングします。 詳細については、「クラスターレベルの Ingress コントローラー」をご参照ください。
注意:
このワークフローは、ArcGIS Enterprise 組織を作成する前に実行する必要があります。 ロード バランサーが配置されて構成されたら、ArcGIS Enterprise Manager にはブラウザーからアクセスできます。
前提条件
一般的な前提条件を確認し、次の EKS 固有の前提条件が満たされていることを確認してください。
- AWS Load Balancer Controller の配置を含め、Amazon EKS に Kubernetes クラスターを準備している必要があります。
- AWS CLI はクライアント コンピューターにインストールする必要があります。 EKS クラスターが存在するアカウントに対して CLI から認証できることを確認してください。
- Kubectl はクライアント コンピューターにインストールする必要があります。 作成したクラスターに関連付けられている Kubernetes API Server に接続してコマンドを発行できることを確認してください。
- EKS クラスター、VPC、関連リソースは「Amazon EKS でのアプリケーション負荷分散」に記載された要件を満たします。
- TLS 証明書が必要です。 Amazon Certificate Manager (ACM) を使用してこの証明書を作成またはインポートできます。
クラスターレベルの Ingress コントローラーの実装
クラスターレベルの Ingress コントローラーを実装して、トラフィックを Amazon EKS 上の ArcGIS Enterprise デプロイメントにルーティングするには、次の手順を実行します。
- AWS のドキュメントに記載されている方法のいずれかを使用して ACM 証明書に関連付けられている Amazon Resource Name (ARN) を取得します。
- layer-7-templates フォルダーに含まれるテンプレートを開くか、次の例をクライアント コンピューター上のファイルにコピーします。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: <deploymentNamespace> name: arcgis-enterprise-ingress annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/backend-protocol: HTTPS alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]' alb.ingress.kubernetes.io/healthcheck-port: '443' alb.ingress.kubernetes.io/healthcheck-protocol: HTTPS alb.ingress.kubernetes.io/healthcheck-path: /<context>/admin alb.ingress.kubernetes.io/success-codes: '200-399' alb.ingress.kubernetes.io/certificate-arn: <ACMCertificateARN> alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=600 #alb.ingress.kubernetes.io/inbound-cidrs: <inboundCIDRRange> #alb.ingress.kubernetes.io/security-groups: <securityGroupID1>,<securityGroupID2> labels: id: custom-ingress-resource spec: ingressClassName: alb rules: - host: <deploymentFQDN> http: paths: - path: /<context> pathType: Prefix backend: service: name: arcgis-ingress-nginx port: number: 443
いくつかのアノテーションの詳細については、下記の「アノテーションの説明」セクションをご参照ください。
- 次の値を置き換えます。
- alb.ingress.kubernetes.io/certificate-arn - 手順 1 で取得した Amazon Resource Name を指定します。
- alb.ingress.kubernetes.io/inbound-cidrs - 特定の CIDR IP アドレス範囲からのインバウンド トラフィックを許可する場合は、この行のコメントを解除し、範囲を指定します。 alb.ingress.kubernetes.io/security-groups アノテーションにセキュリティ グループが指定されている場合、このアノテーションは無視されます。
- alb.ingress.kubernetes.io/security-groups - 既存のセキュリティ グループをアプリケーション ロード バランサーにアタッチする場合は、この行のコメントを解除し、セキュリティ グループ ID を指定します。
- namespace - ArcGIS Enterprise on Kubernetes を配置した名前空間を指定します。
- deploymentFQDN - 最初のデプロイメント時に指定した完全修飾ドメイン名を指定します。
- context - デプロイメント時に指定したコンテキストを指定します。
注意:
この値は 2 か所に表示され、両方のインスタンスで置き換えられる必要があります。 alb.ingress.kubernetes.io/healthcheck-path アノテーション内の値を更新していることを確認してください。
- ファイルをクライアント ワークステーションに保存します。
例: ingress.yaml
- 次のいずれかを実行して、Ingress オブジェクトを作成します。
- 次のコマンドを使用して、Ingress YAML データをクラスターに適用します。
kubectl apply -f ingress.yaml
- デプロイメント スクリプトをサイレントに実行する際は、CLUSTER_INGRESS_CONTROLLER_YAML_FILENAME を Ingress YAML ファイルの場所に設定します。
- 次のコマンドを使用して、Ingress YAML データをクラスターに適用します。
このワークフローを完了したら、arcgis-enterprise-ingress という Ingress オブジェクトが作成されます。 初めて Ingress コントローラーを使用して EKS クラスターへの外部アクセスを管理する場合は、現在作業している AWS アカウント内でプロビジョニング状態にあるアプリケーション ロード バランサーが表示されます。 AWS Load Balancer Controller は、名前空間に適用された YAML データに従って、このアプリケーション ロード バランサーと補助コンポーネントをプロビジョニングします。 このロード バランサーがアクティブな状態になったら、ArcGIS Enterprise デプロイメントがアクセス可能になり、最初のデプロイメント時に指定した完全修飾ドメイン名からプロビジョニング済みのロード バランサーにクライアントを誘導する CNAME DNS レコードが作成されます。
注意:
新しく作成された Ingress を使用して正しい接続を作成するには、arcgis-ingress-controller デプロイメントを更新する必要がある場合があります。 Ingress を作成した後で ArcGIS Enterprise Manager にアクセスしたときにエラーが表示された場合は、次の操作を実行してみてください。kubectl rollout restart deployment/arcgis-ingress-controller -n <deploymentNamespace>
アノテーションの説明
いくつかのアノテーションの詳細については、下記をご参照ください。
- alb.ingress.kubernetes.io/scheme: internet-facing - これにより、インターネット上でアクセス可能なアプリケーション ロード バランサーが作成されます。 ALB の公開を VPC 内からのみにするには、代わりにアノテーション alb.ingress.kubernetes.io/scheme: internal を使用できます。
- alb.ingress.kubernetes.io/target-type: ip - このアノテーションにより、トラフィックをバックエンド ポッドの IP アドレスに直接負荷分散できます。