クラスター証明書を使用したEKSクラスターへの接続(非推奨)
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed
この機能は、GitLab 14.5で非推奨になりました。Infrastructure as Codeを使用して新しいクラスターを作成します。
GitLabを通じて、新しいクラスターを作成したり、Amazon Elastic Kubernetes Service(Amazon EKS)でホストされている既存のクラスターを追加したりできます。
既存のEKSクラスターを接続する
すでにEKSクラスターがあり、GitLabに接続する場合は、Kubernetes向けGitLabエージェントを使用してください。
新しいEKSクラスターを作成する
GitLabから新しいクラスターを作成するには、Infrastructure as Codeを使用します。
クラスター証明書を使用したEKS上に新しいクラスターを作成する方法(非推奨)
前提要件:
- Amazon Web Servicesアカウント。
- IAMリソースを管理するための権限。
インスタンスレベルのクラスターについては、GitLab Self-Managedインスタンスの追加要件を参照してください。
証明書ベースの方法でプロジェクト、グループ、またはインスタンスの新しいKubernetesクラスターを作成するには:
追加の手順:
GitLabで新しいEKSクラスターを作成します
クラスター証明書を使用して、プロジェクト、グループ、またはインスタンスの新しいEKSクラスターを作成するには:
- 以下に移動します:
- プロジェクトレベルのクラスターの場合は、プロジェクトの操作 > Kubernetesクラスターページ。
- グループレベルのクラスターの場合は、グループのKubernetesページ。
- インスタンスレベルのクラスターの場合は、管理者エリアのKubernetesページ。
- Integrate with a cluster certificate(クラスター証明書とのインテグレーション)を選択します。
- Create new cluster(新しいクラスターの作成)タブで、Amazon EKSを選択すると、後続の手順で必要となる
Account IDとExternal IDが表示されます。 - IAM管理コンソールで、IAMポリシーを作成します:
左側のパネルからポリシーを選択します。
Create Policy(ポリシーの作成)を選択します。新しいウィンドウが開きます。
JSONタブを選択し、既存のコンテンツの代わりに次のスニペットを貼り付けます。これらの権限により、GitLabはリソースを作成できますが、削除することはできません:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeScalingActivities", "autoscaling:UpdateAutoScalingGroup", "autoscaling:CreateLaunchConfiguration", "autoscaling:DescribeLaunchConfigurations", "cloudformation:CreateStack", "cloudformation:DescribeStacks", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:CreateSecurityGroup", "ec2:createTags", "ec2:DescribeImages", "ec2:DescribeKeyPairs", "ec2:DescribeRegions", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "eks:CreateCluster", "eks:DescribeCluster", "iam:AddRoleToInstanceProfile", "iam:AttachRolePolicy", "iam:CreateRole", "iam:CreateInstanceProfile", "iam:CreateServiceLinkedRole", "iam:GetRole", "iam:listAttachedRolePolicies", "iam:ListRoles", "iam:PassRole", "ssm:GetParameters" ], "Resource": "*" } ] }このプロセス中にエラーが発生した場合、GitLabは変更をロールバックしません。リソースは手動で削除する必要があります。これを行うには、関連するCloudFormationスタックを削除します。
Review policy(ポリシーのレビュー)を選択します。
このポリシーに適した名前を入力し、Create Policy(ポリシーの作成)を選択します。これでこのウィンドウを閉じることができます。
Amazonでクラスターを準備する
- クラスターのEKS IAM role(EKS IAMロール)を作成します(role A(ロールA))。
- AmazonとのGitLab認証のためにanother EKS IAM role(別のEKS IAMロール)を作成します(role B(ロールB))。
クラスターのEKS IAMロールを作成する
IAM管理コンソールで、EKS IAM role(EKS IAMロール)(role A(ロールA))をAmazon EKSクラスターのIAMロールの手順に従って作成します。このロールは、Amazon EKSによって管理されるKubernetesクラスターが、サービスで使用するリソースを管理するために、ユーザーに代わって他のAWSサービスを呼び出すことができるようにするために必要です。
GitLabがEKSクラスターを正しく管理するには、ガイドが提案するポリシーに加えてAmazonEKSClusterPolicyを含める必要があります。
AmazonとのGitLab認証のために別のEKS IAMロールを作成する
IAM管理コンソールで、AWSとのGitLab認証のために別のIAMロール(role B(ロールB))を作成します:
- AWS IAMコンソールで、左側のパネルからロールを選択します。
- ロールを作成するを選択します。
- Select type of trusted entity(信頼されたエンティティの種類の選択)で、Another AWS account(別のAWSアカウント)を選択します。
- GitLabからのアカウントIDをアカウントIDフィールドに入力します。
- Require external ID(外部IDを必須にする)をオンにします。
- GitLabからの外部IDを[External ID(外部ID)]フィールドに入力します。
- 次へを選択します: 権限を選択し、作成したポリシーを選択します。
- 次へを選択します: タグを選択し、必要に応じてこのロールに関連付けるタグを入力します。
- 次へを選択します: 確認を選択します。
- 表示されたフィールドに、ロール名とオプションの説明を入力します。
- ロールを作成するを選択します。新しいロール名が上部に表示されます。名前を選択し、新しく作成されたロールから
Role ARNをコピーします。
GitLabでクラスターのデータを設定する
- GitLabに戻り、コピーしたAmazonリソースネームを[Role ARN(Amazonリソースネーム)]フィールドに入力します。
- [Cluster Region(クラスターリージョン)]フィールドに、新しいクラスターに使用する予定のリージョンを入力します。GitLabは、ロールを認証するときに、このリージョンへのアクセス権があることを確認します。
- Authenticate with AWS(AWSで認証する)を選択します。
- クラスターの設定を調整します。
- Create Kubernetes cluster(Kubernetesクラスターの作成)ボタンを選択します。
約10分後、クラスターを使用できるようになります。
kubectlをインストールおよび設定済みで、それを使用してクラスターを管理する場合は、AWS外部IDをAWS設定に追加する必要があります。AWS CLIの設定方法の詳細については、AWS CLIでIAMロールを使用を参照してください。
クラスターの設定
新しいクラスターを作成するときは、次の設定があります:
| 設定 | 説明 |
|---|---|
| Kubernetesクラスター名 | クラスターの名前。 |
| 環境スコープ | 関連付けられた環境。 |
| サービスロール | EKS IAM role(EKS IAMロール)(role A(ロールA))。 |
| Kubernetesのバージョン | クラスターのKubernetesのバージョン。 |
| キーペア名 | ワーカーノードへの接続に使用できるキーペア。 |
| VPC: | EKSクラスターリソースに使用するVPC。 |
| サブネット | ワーカーノードが実行されるVPC内のサブネット。2つ必要です。 |
| セキュリティグループ | ワーカーノードサブネットで作成される、EKS管理対象のElastic Network Interfaceに適用するセキュリティグループ。 |
| インスタンスの種類 | ワーカーノードのインスタンスの種類。 |
| ノード数 | ワーカーノードの数。 |
| GitLab管理対象クラスター | GitLabで、このクラスターのネームスペースとサービスアカウントを管理するかどうかを確認します。 |
デフォルトのストレージクラスを作成する
Amazon EKSには、すぐに使用できるデフォルトのストレージクラスがないため、永続ボリュームのリクエストが自動的に実行されることはありません。Auto DevOpsの一部として、デプロイされたPostgreSQLインスタンスは永続ストレージをリクエストし、デフォルトのストレージクラスがないと開始できません。
まだ存在しない場合にデフォルトのストレージクラスを作成するには、ストレージクラスを参照してください。
または、プロジェクト変数POSTGRES_ENABLEDをfalseに割り当てて、PostgreSQLを無効にします。
EKSにアプリをデプロイする
RBACが無効になり、サービスがデプロイされると、Auto DevOpsを活用して、アプリをビルド、テスト、およびデプロイできるようになります。
まだ有効になっていない場合は、Auto DevOpsを有効にします。ロードバランサーに解決されるワイルドカードDNSエントリが作成された場合は、Auto DevOps設定のdomainフィールドに入力します。そうでない場合、デプロイされたアプリはクラスターの外部では外部から利用できません。
GitLabは新しいパイプラインを作成し、アプリのビルド、テスト、およびデプロイを開始します。
パイプラインが終了すると、アプリはEKSで実行され、ユーザーが利用できるようになります。操作 > 環境を選択します。
GitLabは、環境とそのデプロイステータスのリスト、およびアプリを閲覧したり、モニタリングメトリクスを表示したり、実行中のポッドでShellにアクセスしたりするためのオプションを表示します。
GitLab Self-Managedインスタンスの追加要件
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed、GitLab Dedicated
GitLab Self-Managedを使用している場合は、Amazon認証情報を設定する必要があります。GitLabはこれらの認証情報を使用して、Amazon Web Services IAMロールを引き受け、クラスターを作成します。
IAMユーザーを作成し、ユーザーがEKSクラスターを作成するために必要なロールを引き受ける権限があることを確認します。
たとえば、次のポリシードキュメントでは、アカウント123456789012で名前がgitlab-eks-で始まるロールを引き受けることができます:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::123456789012:role/gitlab-eks-*"
}
}Amazon認証を設定する
GitLabでAmazon認証を設定するには、Amazon AWSコンソールでIAMユーザーのアクセスキーを生成し、次の手順に従います:
- 左側のサイドバーの下部で、管理者を選択します。
- 設定 > 一般を選択します。
- Amazon EKSを展開します。
- Amazon EKS連携を有効にするをオンにします。
- アカウントIDを入力します。
- アクセスキーとIDを入力します。
- 変更を保存を選択します。
EKSアクセスキーとID
インスタンスプロファイルを使用して、必要に応じてAWSから一時的な認証情報を動的に取得することができます。この場合は、Access key IDフィールドとSecret access keyフィールドを空白のままにして、IAMロールをEC2インスタンスに渡します。
それ以外の場合は、Access key ID(アクセスキーID)とSecret access key(シークレットアクセスキー)にアクセスキー認証情報を入力します。
トラブルシューティング
新しいクラスターを作成する際に、次のエラーがよく発生します。
検証に失敗しました: Amazonリソースネームは有効なAmazon Web Servicesリソース名である必要があります
Provision Role ARNが正しいことを確認してください。有効なAmazonリソースネームの例:
arn:aws:iam::123456789012:role/gitlab-eks-provision'アクセスが拒否されました」: ユーザーにリソースarn:aws:iam::yに対するsts:AssumeRoleを実行する権限がありません
このエラーは、Amazon認証の設定で定義された認証情報が、プロビジョンロールAmazonリソースネームによって定義されたロールを引き受けることができない場合に発生します:
User `arn:aws:iam::x` is not authorized to perform: `sts:AssumeRole` on resource: `arn:aws:iam::y`以下を確認してください:
AWS認証情報の初期セットにAssumeRoleポリシーがある。
プロビジョンロールには、指定されたリージョンにクラスターを作成するアクセス権があります。
アカウントIDと外部IDが、AWSの[Trust relationships(信頼関係)]タブで定義された値と一致すること:
このVPCのセキュリティグループを読み込むことができませんでした
設定フォームでオプションを入力されたとき、GitLabは、GitLabが提供されたロールを正常に引き受けましたが、そのロールにはフォームに必要なリソースを取得するための十分な権限がないため、このエラーを返します。ロールに正しい権限が割り当てられていることを確認してください。
キーペアが読み込まれていません
GitLabは、指定されたCluster Region(クラスターリージョン)からキーペアを読み込むします。キーペアがそのリージョンに存在することを確認してください。
クラスターの作成中にROLLBACK_FAILED
1つまたは複数のリソースの作成中にGitLabでエラーが発生したため、作成プロセスが停止しました。関連付けられているCloudFormationスタックを調べて、作成に失敗した特定のリソースを見つけることができます。
ClusterリソースがエラーThe provided role doesn't have the Amazon EKS Managed Policies associated with it.で失敗した場合、Role name(ロール名)で指定されたロールが正しく設定されていません。
このロールは、EKSクラスターのIAMロールガイドに従って作成したロールである必要があります。ガイドが提案するポリシーに加えて、GitLabがEKSクラスターを正しく管理するためには、このロールにAmazonEKSClusterPolicyポリシーを含める必要もあります。


