Bạn đã cung cấp bài lab Kubernetes (K8s). Tôi sẽ hướng dẫn từng bước để thực hiện bài lab này.
Bước 1: ServiceAccount
- Kiểm tra ServiceAccount (SA):
- Kiểm tra SA trong namespace
default:kubectl get sa - Kiểm tra SA trong namespace khác (vd:
pyapp-ns-pnh):kubectl get sa -n pyapp-ns-pnh
- Kiểm tra SA trong namespace
- Xem thông tin file mount trong Pod:
- Truy cập Pod:
kubectl exec -it pyapp-deployment-7c86b4cfff-b9n8g -n pyapp-ns-pnh -- /bin/sh - Liệt kê và kiểm tra nội dung file:
ls /var/run/secrets/kubernetes.io/serviceaccount cat /var/run/secrets/kubernetes.io/serviceaccount/token cat /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
- Truy cập Pod:
- Kiểm tra Pod đang dùng ServiceAccount nào:
kubectl get pod -n pyapp-ns-pnh -o yaml pyapp-deployment-7c86b4cfff-b9n8g | grep serviceAccount
Bước 2: Cập nhật ImagePullSecrets
- Thêm
imagePullSecretsvào namespace:kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "registry-pnh-secret"}]}' -n pyapp-ns-pnh - Xác minh cấu hình:
kubectl get sa default -o yaml -n pyapp-ns-pnh
Bước 3: Xóa và cập nhật Deployment
- Xóa Deployment hiện tại:
kubectl delete -f deploypython.yaml - Chỉnh sửa file
deploypython.yaml:- Thêm thông tin
imagePullSecrets:imagePullSecrets: - name: registry-pnh-secret
- Thêm thông tin
- Triển khai lại Deployment:
kubectl apply -f deploypython.yaml
Bước 4: ServiceAccount mặc định
- Kiểm tra Pod đã chạy thành công:
kubectl get pod -n pyapp-ns-pnh - Lý thuyết:
- ServiceAccount mặc định không có quyền truy cập API Server trừ khi được cấu hình RBAC.
Bước 5: RBAC (Role-Based Access Control)
- Tạo Role và ClusterRoleBinding:
- Xem tài nguyên khả dụng:
kubectl api-resources -o wide - Tạo Role cho namespace
test-ns:kubectl create ns test-ns kubectl run svcurl --image=luksa/kubectl-proxy:curl -i --tty -n test-ns
- Xem tài nguyên khả dụng:
Bước 6: Tạo Role
- File
role1.yaml:apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: pyapp-ns-pnh name: pod-reader rules: - apiGroups: [""] verbs: ["get", "list"] resources: ["pods"] - Áp dụng Role:
kubectl apply -f role1.yaml
Bước 7: Tạo RoleBinding
- File
rolebind.yaml:apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: test-role namespace: pyapp-ns-pnh roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: pod-reader subjects: - kind: ServiceAccount name: default namespace: test-ns - Áp dụng RoleBinding:
kubectl apply -f rolebind.yaml
Nếu cần giải thích thêm hoặc gặp khó khăn ở bước nào, bạn hãy hỏi nhé!