Xác thực trong Kubernetes bằng GitHub OAuth và Dex
Tôi giới thiệu với bạn hướng dẫn tạo quyền truy cập vào cụm Kubernetes bằng Dex, dex-k8s-authenticator và GitHub.
Meme địa phương từ cuộc trò chuyện Kubernetes bằng tiếng Nga trong Telegram
Giới thiệu
Chúng tôi sử dụng Kubernetes để tạo môi trường năng động cho nhóm phát triển và QA. Vì vậy, chúng tôi muốn cấp cho họ quyền truy cập vào cụm cho cả bảng thông tin và kubectl. Không giống như OpenShift, vanilla Kubernetes không có xác thực gốc, vì vậy chúng tôi sử dụng các công cụ của bên thứ ba cho việc này.
GitHub - đơn giản vì chúng tôi sử dụng GitHub trong công ty của mình
Chúng tôi đã thử sử dụng Google OIDC, nhưng thật không may, chúng tôi thất bại để bắt đầu với các nhóm, vì vậy việc tích hợp với GitHub khá phù hợp với chúng tôi. Nếu không ánh xạ nhóm, sẽ không thể tạo chính sách RBAC dựa trên nhóm.
Vì vậy, quy trình ủy quyền Kubernetes của chúng tôi hoạt động như thế nào dưới dạng trình bày trực quan:
quy trình ủy quyền
Chi tiết hơn một chút và từng điểm một:
Người dùng đăng nhập vào dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator chuyển tiếp yêu cầu tới Dex (dex.k8s.example.com)
Dex chuyển hướng đến trang đăng nhập GitHub
GitHub tạo thông tin ủy quyền cần thiết và gửi lại cho Dex
Dex chuyển thông tin nhận được tới dex-k8s-authenticator
Người dùng nhận được mã thông báo OIDC từ GitHub
dex-k8s-authenticator thêm mã thông báo vào kubeconfig
kubectl chuyển mã thông báo tới KubeAPIServer
KubeAPIServer trả lại quyền truy cập vào kubectl dựa trên mã thông báo đã chuyển
Người dùng có quyền truy cập từ kubectl
Các hành động chuẩn bị
Tất nhiên, chúng tôi đã cài đặt cụm Kubernetes (k8s.example.com) và cũng được cài đặt sẵn HELM. Chúng tôi cũng có một tổ chức trên GitHub (super-org).
Nếu bạn không có HELM, hãy cài đặt nó rất đơn giản.
Đầu tiên chúng ta cần thiết lập GitHub.
Đi tới trang cài đặt tổ chức, (https://github.com/organizations/super-org/settings/applications) và tạo một ứng dụng mới (Ứng dụng OAuth được ủy quyền):
Tạo một ứng dụng mới trên GitHub
Điền vào các trường với các URL cần thiết, ví dụ:
URL trang chủ: https://dex.k8s.example.com
URL gọi lại ủy quyền: https://dex.k8s.example.com/callback
Hãy cẩn thận với các liên kết, điều quan trọng là không để mất dấu gạch chéo.
Để phản hồi biểu mẫu đã hoàn thành, GitHub sẽ tạo Client ID и Client secret, hãy giữ chúng ở nơi an toàn, chúng sẽ hữu ích cho chúng tôi (ví dụ: chúng tôi sử dụng Vault để lưu trữ bí mật):
Tới trang đăng nhập (https://login.k8s.example.com) và đăng nhập bằng tài khoản GitHub của bạn:
Trang đăng nhập
Trang đăng nhập được chuyển hướng đến GitHub
Thực hiện theo các hướng dẫn được tạo để có quyền truy cập
Sau khi sao chép và dán từ trang web, chúng ta có thể sử dụng kubectl để quản lý tài nguyên cụm của mình:
kubectl get po
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 3d
kubectl delete po mypod
Error from server (Forbidden): pods "mypod" is forbidden: User "[email protected]" cannot delete pods in the namespace "default"
Và nó hoạt động, tất cả người dùng GitHub trong tổ chức của chúng tôi có thể xem tài nguyên và đăng nhập vào nhóm, nhưng họ không có quyền thay đổi chúng.