개요 : EKS는 최초 생성한 사람만이 master 권한을 가지고 있으며, 이 사람을 제외한 사용자는 접근 할 수없다

방법 : EKS 생성 후 생성한 사람의 권한으로 접속하여 다른 사용자/Role 에게 권한을 주어야 한다


1. EKS 생성

 - AWS 콘솔에서 EKS 를 생성

 

2. EC2에 kubectl 명령어 설치 및 EKS config update

 

- kubectl 설치

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html

 

kubectl 설치 또는 업데이트 - Amazon EKS

Amazon EKS 클러스터 제어 영역과 마이너 버전이 하나 다른 kubectl 버전을 사용해야 합니다. 예를 들어 1.24 kubectl 클라이언트는 Kubernetes 1.23, 1.24, 1.25 클러스터와 함께 작동합니다.

docs.aws.amazon.com

- kubectl config upgrade

aws eks update-kubeconfig --region region-code --name my-cluster

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/create-cluster.html

 

Amazon EKS 클러스터 생성 - Amazon EKS

AWS Management Console을 사용하여 클러스터를 배포한 경우 이 단계를 건너뛸 수 있습니다. AWS Management Console은 기본적으로 Amazon VPC CNI plugin for Kubernetes, CoreDNS 및 kube-proxy Amazon EKS 추가 기능을 배포합

docs.aws.amazon.com

 

3. kubectl 명령어 확인

 

4. aws-auth configmap 확인

    ※ EKS Cluster 만 있을 때에는 aws-auth 가 생성 되지 않는 것으로 보입니다.

        따라서, 노드그룹을 생성 해야 aws-auth configmap 이 생성 됩니다.

 

5. 아래와 같이 Configmap 수정 

 - 초록색 부분이 기본적으로 설정 되어 있는 부분 입니다.

 - role 로 매핑할 경우 아래와 같이 mapRoles 부분에 원하는 Role 을 추가 하면 됩니다

    -> 새로 추가하는 groups 의 username 은 아무거나 입력해도 됩니다

 - 2번 항목에서 EC2 에서 사용하는 IAM 역할이 바로 위 항목에서 입력한 Role 과 동일해야 EC2 에서 EKS 를 사용 할 수 있습니다.

 

 

 - user 권한을 추가할 경우 아래 문서 참고 하여 추가

 - user ID 를사용할 경우 EC2 에 해당 user Credential 이 있어야 합니다.

 - 참고 : aws sts get-caller-identity

    https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/add-user-role.html

 

클러스터에 대한 IAM 보안 주체 액세스 사용 - Amazon EKS

역할 ARN에는 role/my-team/developers/my-role과 같은 경로가 포함될 수 없습니다. ARN 형식은 arn:aws:iam::111122223333:role/my-role이어야 합니다. 이 예에서는 my-team/developers/를 제거해야 합니다.

docs.aws.amazon.com

 

 

참고자료

[system:masters] 에 생성자 user 가 매핑 되는 것을 EKS log 로 확인 가능

EKS 최초 생성 시 생성자 계정이 system:master 에 매핑됨
Authenticator Version: "v0.5.15", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
time="2023-04-16T04:27:27Z" level=info msg="starting mapper \"MountedFile\""
time="2023-04-16T04:27:27Z" level=info msg="starting mapper \"EKSConfigMap\""
time="2023-04-16T04:27:27Z" level=info msg="starting mapper \"DynamicFile\""
time="2023-04-16T04:27:27Z" level=info msg="mapping IAM role" groups="[]" role="arn:aws:iam::698743187964:role/AWSWesleyClusterManagerLambda-Add-AddonManagerRole-1xxxY" username="eks:addon-manager"
time="2023-04-16T04:27:27Z" level=info msg="mapping IAM role" groups="[]" role="arn:aws:iam::698743187964:role/AWSWesleyClusterManagerLambda-NodeManagerRole-SJxxxOT" username="eks:node-manager"
time="2023-04-16T04:27:27Z" level=info msg="mapping IAM role" groups="[]" role="arn:aws:iam::698743187964:role/AWSWesleyClusterManagerLambda-FargateManagerRole-XAxxx4T" username="eks:fargate-manager"
time="2023-04-16T04:27:27Z" level=info msg="mapping IAM user" groups="[system:masters]" user="arn:aws:iam::111111111111:user/xxxxxx@xxxxxxx.co.kr" username=kubernetes-admin
time="2023-04-16T04:27:27Z" level=error msg="Unable to re-establish watch: Get \"https://10.0.50.xxx:443/api/v1/namespaces/kube-system/configmaps?fieldSelector=metadata.name%3Daws-auth&watch=true\": dial tcp 10.0.50.219:xxx: connect: connection refused, sleeping for 5 seconds."
time="2023-04-16T04:27:30Z" level=info msg="Creating certificate with address" address=127.0.0.1
time="2023-04-16T04:27:30Z" level=info msg="generated a new private key and certificate" certBytes=xxx keyBytes=xxxx
time="2023-04-16T04:27:30Z" level=info msg="saving new key and certificate" certPath=/var/authenticator/xxxx.pem keyPath=/var/authenticator/xxx.pem
time="2023-04-16T04:27:30Z" level=info msg="loaded existing keypair" certPath=/var/authenticator/xxxx.pem keyPath=/var/authenticator/xxx.pem
time="2023-04-16T04:27:30Z" level=info msg="writing webhook kubeconfig file" kubeconfigPath=/etc/kubernetes/authenticator/apiserver-webhook-kubeconfig.yaml
time="2023-04-16T04:27:30Z" level=info msg="listening on 127.0.0.1:xxxxx"
time="2023-04-16T04:27:30Z" level=info msg="reconfigure your apiserver with `--authentication-token-webhook-config-file=/etc/kubernetes/authenticator/apiserver-webhook-kubeconfig.yaml` to enable (assuming default hostPath mounts)"
time="2023-04-16T04:27:30Z" level=info msg="Using assumed role for EC2 API" roleARN="arn:aws:iam::111111111111:role/xxxEKSClusterRole"
time="2023-04-16T04:27:30Z" level=info msg="Starting the h.ec2Provider.startEc2DescribeBatchProcessing "
time="2023-04-16T04:27:32Z" level=error msg="Unable to re-establish watch: Get \"https://10.0.50.xxx:443/api/v1/namespaces/kube-system/configmaps?fieldSelector=metadata.name%3Daws-auth&watch=true\": dial tcp 10.0.50.xxx:xxx: connect: connection refused, sleeping for 5 seconds."
time="2023-04-16T04:27:41Z" level=error msg="Unable to re-establish watch: unknown (get configmaps), sleeping for 5 seconds."
time="2023-04-16T04:27:46Z" level=error msg="Unable to re-establish watch: unknown (get configmaps), sleeping for 5 seconds."



노드그룹 생성
time="2023-04-16T04:50:06Z" level=info msg="Received aws-auth watch event"
time="2023-04-16T04:50:31Z" level=info msg="STS response" accesskeyid=xxxxxxxxxxxxxxx accountid=111111111111 arn="arn:aws:sts::111111111111:assumed-role/AmazonEKSNodeRole/i-0xxxxxxxxxe8" client="127.0.0.1:xxxxx" method=POST path=/authenticate session=i-0xxxxxxxe8 userid=xxxxxxx
time="2023-04-16T04:50:31Z" level=info msg="Calling ec2:DescribeInstances for the InstanceId = i-xxxxxx "
time="2023-04-16T04:50:32Z" level=info msg="access granted" arn="arn:aws:iam::111111111111:role/xxxxEKSNodeRole" client="127.0.0.1:xxxxx" groups="[system:bootstrappers system:nodes]" method=POST path=/authenticate uid="aws-iam-authenticator:111111111111:xxxxx" username="system:node:ip-172-xx-xx-xx.ap-northeast-2.compute.internal"

 

 

 

 

 

'AWS' 카테고리의 다른 글

AWS Multi Region Network 구성  (0) 2023.06.07
ECR Multi Region Replication  (0) 2023.06.04
AWS LB Annotations  (0) 2023.01.23
EventBridge 를 사용한 알람 발송  (0) 2023.01.20
AWS EKS nodegroup 생성 시 필요 조건  (0) 2023.01.20

1. 컨트롤 플레인 노드 업그레이드

master node 에서 실행
yum install -y kubeadm-1.26.x-0 --disableexcludes=kubernetes

다운로드 결과 조회
kubeadm version

업그레이드 계획 확인
sudo kubeadm upgrade plan v.1.2x.x

2. kubeadm upgrade

sudo kubeadm upgrade apply v1.2x.x

결과 확인
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.26.x". Enjoy!

[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.

3. node drain

kubectl drain <node-to-drain> --ignore-daemonsets

4. kubelet and kubectl upgrade

yum install -y kubelet-1.2x.x-0 kubectl-1.2x.x-0 --disableexcludes=kubernetes

5. kubelet reolad and uncordon

sudo systemctl daemon-reload
sudo systemctl restart kubelet

kubectl uncordon <node-to-drain>

6. workernode upgrade

wokernode 에서
yum install -y kubeadm-1.2x.x-0 --disableexcludes=kubernetes

sudo kubeadm upgrade node

7. node drain and kubelet/kubectl upgrade

kubectl drain <node-to-drain> --ignore-daemonsets

yum install -y kubelet-1.2x.x-0 kubectl-1.2x.x-0 --disableexcludes=kubernetes

8. kubelet restart

sudo systemctl daemon-reload
sudo systemctl restart kubelet

kubectl uncordon <node-to-drain>

 

'k8s > CKA' 카테고리의 다른 글

[연습]9. etcd backup AND restore  (0) 2023.03.04
[연습]7. pod_mount  (0) 2023.03.04
[연습]6. Pod run with env  (0) 2023.03.02
[연습]5. Pod run  (0) 2023.03.02
[연습]4. expose AND service  (0) 2023.03.02

방법 : 

1. ETCD backup

##backup

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  --cacert=<trusted-ca-file> \
  --cert=<cert-file> \
  --key=<key-file> \
  snapshot save <backup-file-location>

2. ETCD restore

ETCDCTL_API=3 etcdctl  \
--data-dir <data-dir-location> \   ## 변경될 etcd 위치(to-be)
snapshot restore snapshotdb        ## 복구시킬 저장된 스냅샷 경로(as-is)

3. etcd.yaml 파일 수정

sudo vim /etc/kubernetes/manifests/etcd/yaml

- hostPath : 
  path : [새로만든 경로로 수정]

'k8s > CKA' 카테고리의 다른 글

[연습]10. kubeadm upgrade  (0) 2023.03.04
[연습]7. pod_mount  (0) 2023.03.04
[연습]6. Pod run with env  (0) 2023.03.02
[연습]5. Pod run  (0) 2023.03.02
[연습]4. expose AND service  (0) 2023.03.02

조건 : redis 이름과  imgae 를 사용하는 POD를 생성 후 /data/redis 경로에 마운트

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: non-persistent-redis
  name: non-persistent-redis
spec:
  containers:
  - image: redis
    name: redis-container
    volumeMounts:
      - mountPath: /data/redis
        name: redis-mount
  volumes:
    - name: redis-mount

 

'k8s > CKA' 카테고리의 다른 글

[연습]10. kubeadm upgrade  (0) 2023.03.04
[연습]9. etcd backup AND restore  (0) 2023.03.04
[연습]6. Pod run with env  (0) 2023.03.02
[연습]5. Pod run  (0) 2023.03.02
[연습]4. expose AND service  (0) 2023.03.02

주제 : 조건에 맞는 파드를 생성하라

조건 : 

  • pod name : nginx
  • env : var = value
  • 생성 후 env 확인
kubectl run nginx --image=nginx --restart=Never --env=var1=value1 --dry-run=client -o yaml

[위 명령어로 생성되는 yaml 파일을 아래와 같이 수정]
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - env:
    - name: var1
      value: value1
    image: nginx
    name: nginx
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never


[생성 후 pod 의 env 확인 방법]
kubectl exec -it nginx -- env
kubectl exec -it nginx -- sh -c 'echo $varl'
kubectl describe nginx | grep value1

https://kubernetes.io/ko/docs/tasks/inject-data-application/define-environment-variable-container/

'k8s > CKA' 카테고리의 다른 글

[연습]9. etcd backup AND restore  (0) 2023.03.04
[연습]7. pod_mount  (0) 2023.03.04
[연습]5. Pod run  (0) 2023.03.02
[연습]4. expose AND service  (0) 2023.03.02
[연습]3. NetworkPolicy  (0) 2023.03.02

+ Recent posts