25๋ ๋ AWS EKS Hands-on Study ์คํฐ๋ ์ ๋ฆฌ ๋ด์ฉ์ ๋๋ค.
K8s ์ธ์ฆ/์ธ๊ฐ ์ค์ต
์ฟ ๋ฒ๋คํฐ์ค์์ dev-k8s ๋ฐ infra-k8s ์๋น์ค ์ด์นด์ดํธ๋ฅผ ์์ฑํ์ฌ, dev-team ๋ค์์คํ์ด์ค ๋ด์์ ๊ฐ๊ฐ ๋ค๋ฅธ ๊ถํ์ ๋ถ์ฌํ๊ณ ํ ์คํธํด๋ณด๋๋ก ํ๋ค.
SA, ๋ค์์คํ์ด์ค ์์ฑ
kubectl create namespace dev-team
namespace/dev-team created
kubectl create ns infra-team
namespace/infra-team created
kubectl get ns
NAME STATUS AGE
default Active 72m
dev-team Active 6s
infra-team Active 5s
kube-node-lease Active 72m
kube-public Active 72m
kube-system Active 72m
local-path-storage Active 72m
kubectl create sa dev-k8s -n dev-team
serviceaccount/dev-k8s created
kubectl create sa infra-k8s -n infra-team
serviceaccount/infra-k8s created
์๋น์ค ์ด์นด์ดํธ์ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ๋ค.
ํ ์คํธ ํ๋ ๋ฐฐํฌ
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: dev-kubectl
namespace: dev-team
spec:
serviceAccountName: dev-k8s
containers:
- name: kubectl-pod
image: bitnami/kubectl:1.31.4
command: ["tail"]
args: ["-f", "/dev/null"]
terminationGracePeriodSeconds: 0
EOF
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: infra-kubectl
namespace: infra-team
spec:
serviceAccountName: infra-k8s
containers:
- name: kubectl-pod
image: bitnami/kubectl:1.31.4
command: ["tail"]
args: ["-f", "/dev/null"]
terminationGracePeriodSeconds: 0
EOF
๊ฐ๊ฐ์ ๋ค์์คํ์ด์ค์ ํ๋๋ฅผ ๋ฐฐํฌํ๋ค.
kubectl get pod -o dev-kubectl -n dev-team -o yaml |
grep service
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
serviceAccount: dev-k8s
serviceAccountName: dev-k8s
- serviceAccountToken:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
kubectl get pod -o infra-kubectl -n infra-team -o yaml | grep service
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
serviceAccount: infra-k8s
serviceAccountName: infra-k8s
- serviceAccountToken:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
๊ถํ ํ์ธ
alias k1='kubectl exec -it dev-kubectl -n dev-team -- kubectl'
alias k2='kubectl exec -it infra-kubectl -n infra-team -- kubectl'
k1 get pods
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:dev-team:dev-k8s" cannot list resource "pods" in API group "" in the namespace "dev-team"
k2 get pods
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:infra-team:infra-k8s" cannot list resource "pods" in API group "" in the namespace "infra-team"
k1 auth can-i get pods
no
ํ์ฌ dev-k8s ๋ฐ infra-k8s ์๋น์ค ์ด์นด์ดํธ๋ Kubernetes ๋ฆฌ์์ค ์กฐํ ๊ถํ์ด ์์ด์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
cat <<EOF | kubectl create -f -
> apiVersion: rbac.authorization.k8s.io/v1
> kind: Role
> metadata:
> name: role-dev-team
> namespace: dev-team
> rules:
> - apiGroups: ["*"]
> resources: ["*"]
> verbs: ["*"]
> EOF
role.rbac.authorization.k8s.io/role-dev-team created
cat <<EOF | kubectl create -f -
> apiVersion: rbac.authorization.k8s.io/v1
> kind: Role
> metadata:
> name: role-infra-team
> namespace: infra-team
> rules:
> - apiGroups: ["*"]
> resources: ["*"]
> verbs: ["*"]
> EOF
role.rbac.authorization.k8s.io/role-infra-team created
kubectl get roles -n dev-team
NAME CREATED AT
role-dev-team 2025-03-15T18:56:26Z
kubectl get roles -n infra-team
NAME CREATED AT
role-infra-team 2025-03-15T18:56:28Z
ํน์ ๋ค์์คํ์ด์ค์์๋ง ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ๊ถํ์ ์ ์ํ๋ ๊ฐ์ฒด์ธ ๋กค์ ์์ฑํ๋ค.
๋กค์ ๋ค์์คํ์ด์ค ๋ด์์๋ง ์ ์ฉ๋๋ฉฐ, ํด๋ฌ์คํฐ ์ ์ฒด์ ์ ์ฉํ๋ ค๋ฉด ClusterRole์ ์ฌ์ฉํด์ผ ํ๋ค.
apiGroups, resources, verbs ํ๋๋ฅผ ํตํด ์ ๊ทผํ ์ ์๋ ๋ฆฌ์์ค์ ๋์์ ์ ์ํ๋ค.
cat <<EOF | kubectl create -f -
> apiVersion: rbac.authorization.k8s.io/v1
> kind: RoleBinding
> metadata:
> name: roleB-dev-team
> namespace: dev-team
> roleRef:
> apiGroup: rbac.authorization.k8s.io
> kind: Role
> name: role-dev-team
> subjects:
> - kind: ServiceAccount
> name: dev-k8s
> namespace: dev-team
> EOF
rolebinding.rbac.authorization.k8s.io/roleB-dev-team created
cat <<EOF | kubectl create -f -
> apiVersion: rbac.authorization.k8s.io/v1
> kind: RoleBinding
> metadata:
> name: roleB-infra-team
> namespace: infra-team
> roleRef:
> apiGroup: rbac.authorization.k8s.io
> kind: Role
> name: role-infra-team
> subjects:
> - kind: ServiceAccount
> name: infra-k8s
> namespace: infra-team
> EOF
rolebinding.rbac.authorization.k8s.io/roleB-infra-team created
ํน์ ๋ค์์คํ์ด์ค์์ Role์ ํน์ ์ฌ์ฉ์ ๋๋ ์๋น์ค ์ด์นด์ดํธ(ServiceAccount)์ ์ฐ๊ฒฐํ๋ ๊ฐ์ฒด์ธ ๋กค ๋ฐ์ธ๋ฉ์ ์์ฑํ๋ค.
Role์ ๋จ๋ ์ผ๋ก ์์ฑํด๋ ์๋ฌด ์๋ฏธ๊ฐ ์์ผ๋ฉฐ RoleBinding์ ํตํด ์๋น์ค ์ด์นด์ดํธ์ ์ฐ๊ฒฐํด์ผ ๋กค์ด ์ ์ฉ๋๋ค.
kubectl describe rolebindings roleB-dev-team -n dev-team
Name: roleB-dev-team
Labels: <none>
Annotations: <none>
Role:
Kind: Role
Name: role-dev-team
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount dev-k8s dev-team
์ด์ ์๋น์ค ์ด์นด์ดํธ์ ์ ๋๋ก ๊ถํ์ด ํ ๋น๋์๋ค!
k1 get pods
NAME READY STATUS RESTARTS AGE
dev-kubectl 1/1 Running 0 8m31s
k2 get pods
NAME READY STATUS RESTARTS AGE
infra-kubectl 1/1 Running 0 8m24s
k1 auth can-i get pods
yes
k2 auth can-i get pods
yes
์ด์ ๊ถํ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฟ ๋ฒ๋คํฐ์ค ๋ช ๋ น์ด๋ก ํด๋น ๋ค์์คํ์ด์ค ๋ด ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
'Infra > AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AEWS] #6์ฃผ์ฐจ IRSA ์ค์ต (4) (1) | 2025.03.16 |
---|---|
[AEWS] #6์ฃผ์ฐจ EKS ์ธ์ฆ/์ธ๊ฐ (3) (1) | 2025.03.16 |
[AEWS] #6์ฃผ์ฐจ x.509 ์ธ์ฆ์ ๊ตฌ์กฐ ๋ฐ ๊ฒ์ฆ ์ค์ต (1) (0) | 2025.03.16 |
AWS MFA ์ญ์ ํ์ ๋ ์กฐ์น ๋ฐ PC๋ก ์ธ์ฆ ๋ณ๊ฒฝ (0) | 2025.03.10 |
[AEWS] #5์ฃผ์ฐจ Karpenter ์ค์ต (3) (0) | 2025.03.08 |