클라우드 Final Project 4일차

soso·2024년 10월 4일

클라우드 부트캠프

목록 보기
71/77

EKS와 달리 kops는 IRSA 방식을 기본적으로 쓰지 않기 때문에(물론 IRSA를 따로 설치하면 가능하다 한다) 파드가 aws 자격증명을 상속받지 못한다 한다
난 kops를 ec2 인스턴스 위에 설치했기 때문에 CA를 하려면 kiam이나 kube2iam 같은 도구나 IRSA를 설치해서 pod가 aws 자격증명을 얻어야 한다

24/10/16
다시 찾아보니 아니라 하는데 다음주 중에 재시도 해보려 한다

처음엔 kube2iam을 설치해서 진행했었다. 내가 사용하고 있는 ec2 인스턴스가 IMDSv2(보안을 강화하기 위해 특정 요청에 대한 토큰을 요구함)를 사용하고 있지만 kube2iam은 이걸 지원하지 않아(이건 다시 확인해봐야한다) pod가 CreateLoopBackOff 오류가 뜨면서 계속 로그에

time="2024-10-04T07:25:23Z" level=error msg="Error getting instance id, got status: 401 Unauthorized"

가 떠서 kiam으로 변경했다

kiam repo를 클론해오고 kiam 전용 역할을 만든 뒤(기존 ec2 인스턴스는 admin 권한)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sts:GetCallerIdentity",
                "sts:AssumeRole"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeTags"
            ],
            "Resource": "*"
        }
    ]
}

depoly 폴더의 server.deployment.yaml과 server.daemonset.yaml의 args에 명시적으로 추가

--role-base-arn=arn:aws:iam::accountid:role/kiam-role-team1

kiam server pod에서 계속 401 unauthorized 오류가 뜨길래 server.deployment와 server.daemonset.yaml env에 IMDSv2를 인식하기 위해 환경변수 추가

env:
  - name: AWS_EC2_METADATA_TOKEN_URL
    value: "http://169.254.169.254/latest/api/token"
  - name: AWS_EC2_METADATA_TOKEN_TTL_SECONDS
    value: "21600"

인증서 오류가 떠서

# CA 인증서 생성
openssl genrsa -out ca-key.pem 2048
openssl req -x509 -new -nodes -key ca-key.pem -sha256 -days 1024 -out ca.pem -subj "/CN=My CA"

# 서버 키 및 CSR 생성
openssl genrsa -out server-key.pem 2048
openssl req -new -key server-key.pem -out server.csr -subj "/CN=kiam-server.kube-system.svc.cluster.local"

# 서버 인증서 생성
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server.pem

# Kubernetes에 비밀 생성
kubectl create secret generic kiam-server-tls \
  --from-file=server.pem=./server.pem \
  --from-file=server-key.pem=./server-key.pem \
  --from-file=ca.pem=./ca.pem \
  -n kube-system

했는데도 계속 pod가 0/1로 Running 상태였다가 CrashLoopBackOff가 떠서 describe로 봤더니 kiam 서버가 gRPC 서버에 연결하는 데 실패한다고 뜬다

Readiness probe failed: time="2024-10-04T11:18:06Z" level=fatal msg="error creating server gateway: error dialing grpc server: context deadline exceeded"

pod에 exec -it 해서 들어가본 후에 nslookup google.com이 적용되는걸 보면 네트워크는 정상적으로 작동하는데 메모리가 부족해 오류가 떠서 예전에 옛날 이미지로 pod를 배포했을때 메모리가 비정상적으로 늘어났던 기억이 떠올라 찾아보니 지금 배포된 이미지가 최신 이미지가 아닌 것을 확인, 다시 최신 이미지로 변경했다

image: quay.io/uswitch/kiam:v4.2

그리고 계속 로그가 안떠서 initialDelaySeconds, periodSeconds, timeoutSeconds를 늘려주고 로그 레벨을 높여줬다

initialDelaySeconds: 120
periodSeconds: 20
timeoutSeconds: 20
env:
  - name: AWS_EC2_METADATA_TOKEN_URL
    value: "http://169.254.169.254/latest/api/token"
  - name: AWS_EC2_METADATA_TOKEN_TTL_SECONDS
    value: "21600"
  - name: GRPC_GO_LOG_SEVERITY_LEVEL
    value: "info"
  - name: GRPC_GO_LOG_VERBOSITY_LEVEL
    value: "8"

그랬더니 마지막에 처음 보는 오류인

[root@ip-172-31-46-129: ~/kiam/deploy]$ kubectl logs -n kube-system pod/kiam-server-8684c8975d-g8frz
{"level":"fatal","msg":"error using AWS STS Gateway: role can't be empty","time":"2024-10-04T14:13:13Z"}

역할이 비었다고 하는데 일단 오늘은 여기까지..

kops CA 공식문서

후에 kops 공식 문서를 보고 워커 노드 그룹 설정 파일에

spec:
  clusterAutoscaler:
    enabled: true
    expander: least-waste
    balanceSimilarNodeGroups: false
    emitPerNodegroupMetrics: false
    awsUseStaticInstanceList: false
    scaleDownUtilizationThreshold: 0.5
    skipNodesWithCustomControllerPods: true
    skipNodesWithLocalStorage: true
    skipNodesWithSystemPods: true
    newPodScaleUpDelay: 0s
    scaleDownDelayAfterAdd: 10m0s
    scaleDownUnneededTime: 10m0s
    scaleDownUnreadyTime: 20m0s
    image: <the latest supported image for the specified kubernetes version>
    cpuRequest: "100m"
    memoryRequest: "300Mi"

이걸 추가하고 업데이트 후 노드 IAM 역할에 적절한 권한만 추가해주면 하면 kops에서 쉽게 CA가 적용된다 해서 해봤는데

[root@ip-172-31-46-129: ~]$ kops edit ig nodes-ap-northeast-3a
Using cluster from kubectl context: 

A copy of your changes has been stored to "/tmp/kops-edit-3146121345yaml"
Error: Edit cancelled: no valid changes were saved.

저장이 안된다
Kops에서 인식할 수 없는 필드가 포함되어서 그렇다는데 공식 문서에 있는 그대로 적용한건데도 모르겠다..

0개의 댓글