EKS 환경에서 Wordrpess를 배포합니다.
이때, Wordpress 구성요소는 Public 하게 관리 할 것이며, MySQL 구성요소는 Private 하게 관리 할 것입니다.
Wordpress는 서비스를 외부로 노출하기 위해 Service의 Type: LoadBalancer 또는 Ingress 를 활용할 수 있습니다.
우선적으로 1번 방안으로 진행하고 다음 포스팅에서 2번 방법도 사용해 보겠습니다.(참고)
Amazon EKS 클러스터에 대한 Amazon EFS 파일 시스템을 생성합니다.
curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/v1.2.0/docs/iam-policy-example.json
정책을 만듭니다. 아래 AmazonEKS_EFS_CSI_Driver_Policy
을 다른 이름으로 변경할 수 있지만, 그렇게 할 경우 이후 단계에서도 변경해야 합니다.
aws iam create-policy \
--policy-name AmazonEKS_EFS_CSI_Driver_Policy \
--policy-document file://iam-policy-example.json
다음 명령은 IAM 역할 및 Kubernetes 서비스 계정을 만듭니다. 또한 정책을 역할에 연결하고 Kubernetes 서비스 계정에 IAM 역할 ARN 주석으로 추가하고 Kubernetes 서비스 계정 이름을 IAM 역할에 대한 신뢰 정책에 추가합니다. 클러스터에 IAM OIDC 공급자가 없는 경우 명령은 IAM OIDC 공급자도 생성합니다.
eksctl create iamserviceaccount \
--name efs-csi-controller-sa \
--namespace kube-system \
--cluster <cluster-name> \
--attach-policy-arn arn:aws:iam::<Account ID>:policy/AmazonEKS_EFS_CSI_Driver_Policy \
--approve \
--override-existing-serviceaccounts \
--region ap-northeast-2
이 절차에는 Helm V3 이상이 필요합니다.
Helm을 설치
->
helm repo add aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver/
helm repo update
helm upgrade -i aws-efs-csi-driver aws-efs-csi-driver/aws-efs-csi-driver \
--namespace kube-system \
--set image.repository=602401143452.dkr.ecr.ap-northeast-2.amazonaws.com/eks/aws-efs-csi-driver \
--set serviceAccount.controller.create=false \
--set serviceAccount.controller.name=efs-csi-controller-sa
vpc_id=$(aws eks describe-cluster \
--name <cluster-name> \
--query "cluster.resourcesVpcConfig.vpcId" \
--output text)
cidr_range=$(aws ec2 describe-vpcs \
--vpc-ids $vpc_id \
--query "Vpcs[].CidrBlock" \
--output text)
security_group_id=$(aws ec2 create-security-group \
--group-name MyEfsSecurityGroup \
--description "My EFS security group" \
--vpc-id $vpc_id \
--output text)
####2. 클러스터의 VPC 대한 CIDR에서 인바운드 NFS 트래픽을 허용하는 인바운드 규칙을 생성합니다.
aws ec2 authorize-security-group-ingress \
--group-id $security_group_id \
--protocol tcp \
--port 2049 \
--cidr $cidr_range
file_system_id=$(aws efs create-file-system \
--region ap-northeast-2 \
--performance-mode generalPurpose \
--query 'FileSystemId' \
--output text)
탑재 대상을 만듭니다.
kubectl get nodes
aws ec2 describe-subnets \
--filters "Name=vpc-id,Values=$vpc_id" \
--query 'Subnets[*].{SubnetId: SubnetId,AvailabilityZone: AvailabilityZone,CidrBlock: CidrBlock}' \
--output table
결과
| DescribeSubnets |
+------------------+--------------------+----------------------------+
| AvailabilityZone | CidrBlock | SubnetId |
+------------------+--------------------+----------------------------+
| ap-northeast-2c | 192.168.128.0/19 | subnet-6e421a0e97 |
| ap-northeast-2b | 192.168.96.0/19 | subnet-d0503db0ec |
| ap-northeast-2c | 192.168.32.0/19 | subnet-2ba886490 |
| ap-northeast-2b | 192.168.0.0/19 | subnet-123c7c5182 |
| ap-northeastt-2a | 192.168.160.0/19 | subnet-EXAMPLE0416ce588p |
| ap-northeast-2a | 192.168.64.0/19 | subnet-12c68ea7fb |
+------------------+--------------------+----------------------------+
aws efs create-mount-target \
--file-system-id $file_system_id \
--subnet-id subnet-034e836661d362946\
--security-groups $security_group_id
mount target을 확인하기 위한 험난한 여정...
echo $file_system_id
fs-4c6ad02c
aws efs describe-mount-targets --file-system-id fs-4c6ad02c
{
"MountTargets": [
{
"MountTargetId": "fsmt-cec8b5af",
"VpcId": "vpc-0dfde63787164eaed",
"AvailabilityZoneId": "apne2-az1",
"NetworkInterfaceId": "eni-0f71d47acb3de43d9",
"AvailabilityZoneName": "ap-northeast-2a",
"FileSystemId": "fs-4c6ad02c",
"LifeCycleState": "available",
"SubnetId": "subnet-01f6009c85f598ad6",
"OwnerId": "970698899539",
"IpAddress": "192.168.7.96"
},
{
"MountTargetId": "fsmt-dcc8b5bd",
"VpcId": "vpc-0dfde63787164eaed",
"AvailabilityZoneId": "apne2-az4",
"NetworkInterfaceId": "eni-0113b2069eb397b75",
"AvailabilityZoneName": "ap-northeast-2d",
"FileSystemId": "fs-4c6ad02c",
"LifeCycleState": "available",
"SubnetId": "subnet-0a9a0be5aa87f011f",
"OwnerId": "970698899539",
"IpAddress": "192.168.54.215"
},
{
"MountTargetId": "fsmt-a0c8b5c1",
"VpcId": "vpc-0dfde63787164eaed",
"AvailabilityZoneId": "apne2-az3",
"NetworkInterfaceId": "eni-0d1ac4740fd4c7546",
"AvailabilityZoneName": "ap-northeast-2c",
"FileSystemId": "fs-4c6ad02c",
"LifeCycleState": "available",
"SubnetId": "subnet-034e836661d362946",
"OwnerId": "970698899539",
"IpAddress": "192.168.84.177"
}
]
}