- 0) 컨테이너 레파지토리 준비
- AWS ECR 기준 Admin 사용자가 아니면,
- IAM 권한 AmazonElasticContainerRegistryPublicFullAccess 셋팅.
- 커스텀 정책 생성&추가. (별첨1)
- AWS ECR 로그인 유지.
- sudo apt update 및 sudo apt install amazon-ecr-credential-helper
- /.docker/config.json 직접 수정. (별첨2)
- AWS ECR 기준 Admin 사용자가 아니면,
- 1) 설치
- eksctl :
- brew tap weaveworks/tap → brew install weaveworks/tap/eksctl → brew upgrade eksctl && brew link --overwrite eksctl→ eksctl version
- Docker, Docker-Compose K8S :
- https://docs.docker.com/docker-for-mac/install
- docker 아이콘 → preference → resource → 사양 튜닝
- docker --version , docker-compose --version , kubectl version
- source <(kubectl completion zsh) // zsh 자동완성
- kubefwd (특정 k8s 서비스에 프록시 기반으로 접속하기)
- brew install txn2/tap/kubefwd → brew upgrade kubefwd → kubefwd help svc
- sudo kubefwd svc -n 네임스페이스 → http://mongo-express:80 접속!
- kustomize
- brew install kustomize
- 각각의 레시피 만들어 보기!
- eksctl :
- 2) 접속 (PC → AWS EKS)
- ”aws configure --profile 프로필” 으로 -> 사용자 보안자격증명키 등록.
- “aws eks --region 리젼 update-kubeconfig --name 클러스터명” 으로 -> ~/.kube 생성.
- ~/.kube/config 수정.
- clusters 및 contexts 및 users(user>exec>args,cmd,env) 등등을 여러개 작성가능!
-
apiVersion: v1 clusters: - cluster: certificate-authority-data: ... server: https://xxx.yl4.ap-northeast-2.eks.amazonaws.com name: main.ap-northeast-2.eksctl.io - cluster: certificate-authority-data: ... server: https://xxx.gr7.us-east-2.eks.amazonaws.com name: mlops.us-east-2.eksctl.io contexts: - context: cluster: mlops.us-east-2.eksctl.io user: yyy@mlops.us-east-2.eksctl.io name: yyy@mlops.us-east-2.eksctl.io - context: cluster: main.ap-northeast-2.eksctl.io user: yyy@main.ap-northeast-2.eksctl.io name: yyy@main.ap-northeast-2.eksctl.io current-context: yyy@mlops.us-east-2.eksctl.io kind: Config preferences: {} users: - name: yyy@mlops.us-east-2.eksctl.io user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 args: - token - -i - mlops command: aws-iam-authenticator env: - name: AWS_STS_REGIONAL_ENDPOINTS value: regional - name: AWS_DEFAULT_REGION value: us-east-2 - name: AWS_PROFILE value: zzz - name: yyy@main.ap-northeast-2.eksctl.io user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 args: - token - -i - main command: aws-iam-authenticator env: - name: AWS_PROFILE value: company
- 해당 클러스터에 해당 사용자 꼮 등록!
- 테스트 : 예) kubectl get ns , kubectl get pod -n 네임스페이스 , ...
- 3) 배포
- 예제 레시피 구조
- base/app.yaml 타겟포트 = 도커이미지포트 맞춤 -> base/kustomization.yaml 의 resources 에 첨부 -> dev/kustomization.yaml 의 bases 에 첨부 conf.env 환경변수 작성 -> dev/kustomization.yaml 의 configMapGenerator 에 첨부
- secret.yaml 정의(Secret) 및 사용할 시크릿데이터 베64 작성 -> dev/kustomization.yaml 의 resources 에 첨부 (k8s secrets에 조회 됨) (혹은, 사용할 시크릿데이터 파일 복사 -> dev/kustomization.yaml 의 secretGenerator 에 첨부) (k8s secrets에 조회 안됨?) : k8s에 신규namespace 생성 -> 해당namespace에 필수secret 등록 -> 이미지의 프로세스Port로 app.yaml 맞춰 -> conf.env 작성 -> secret 베64&볼륨화&마운트 -> k8s 적용 테스트
- k8s ingress 의 Basic Auth 셋팅
- https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/auth/basic
- basic auth 파일생성
- htpasswd -c 파일명 아이디
- kubectl create secret generic basic-auth --from-file=파일명 -n 네임스페이스
- kubectl get secrets -n 네임스페이스
- kustomization.yaml 작성
- reources → ingress.yaml 추가
- ingress.yaml → 어노테이션 추가
- nginx.ingress.kubernetes.io/auth-type: basic
- nginx.ingress.kubernetes.io/auth-secret: basic-auth
- nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'
- 테스트 : 예)
- kubectl get ingress -n 네임스페이스
- curl 12345.ap-northeast-2.elb.amazonaws.com -H 'Host: api.d.test.xyz' -u “아이디:비번”
- 예제 레시피 구조
- ...
-끝-
'DevOps' 카테고리의 다른 글
Graphite (0) | 2024.10.30 |
---|---|
doppler (0) | 2023.07.13 |
크로미움과 토륨 in docker (0) | 2023.07.13 |
Jenkins (0) | 2022.01.02 |
puckel Airflow V1 on K8S (0) | 2021.06.26 |