Header Ads Widget

Ticker

6/recent/ticker-posts

Công cụ đơn giản để connect tới Nodes trong Kubernetes

Keyword: A Simple tools create to can connect to nodes in Kubernetes.

Dạo này tình hình kinh tế ngày càng khó khăn, các công ty layoff liên tục, bản thân mình cũng bận đủ thứ vấn đề nên mới ít viết bài như thế, thấy những anh em trước đây viết blog chung với mình cũng ẩn thân hết trơn, như anh Cường Quách hoặc anh Thạch Phạm v.v..., chắc ai cũng lo cho cuộc sống riêng của họ hết rồi, mà thôi bỏ qua đi tâm sự thế được rồi, giờ thì chúng ta sẻ nói về chủ đề chính của ngày hôm nay, đó chính là việc connect vào nodes trên Kubernetes.

Do phía kubectl chưa có câu lệnh nào để có thể connect đến nodes (vì đến thời điểm hiện tại thì theo như bản thân mình biết, thì nó là như vậy còn nếu như anh em nào biết cách thì cứ bình luận ở phía dưới để mình học hỏi thêm nhé) nên thành ra bản thân mình cũng tò mò và tìm cách thực hiện tạo ra một tools để hổ trợ cho riêng việc đó, thật ra bản thân mình cũng là tình cờ thôi bởi lẻ trong công ty mình có đang dùng Lens để quản lý Kubernetes.

Xong thì một ngày đẹp trời thằng em làm chung trong công ty mình nó có hỏi mình một câu là "Không biết thằng Kubernetes nó có câu lệnh connect đến nodes không nhỉ và tại sao nó lại connect được" vì nó thấy thằng Lens nó có hổ trợ điều đó và access tới nodes một cách dễ dàng.

Nghe thì cũng khá thú vị đấy, vì mình lúc đầu cứ nghĩ rằng nó sẽ decode base64 của file config, xong sau đó thực hiện sử dụng Private Key đó để SSH tới nodes trong Kubernetes, thế là mình bắt đầu tìm hiểu thử thì chẳng có cách nào để access tới nodes thông qua file config và sau đó SSH đến cả, SSH đến thì có thể vì mình có thể lấy Private Key khi mình tạo VM node đó, nhưng mà để sử dụng file config và connect tới nodes thì mình vẫn chưa tìm ra được.

Thế là mình thực hiện tìm hiểu ở thằng Lens để xem thử tại sao nó lại có thể truy cập được hay đến vậy, thì khi truy cập vào source code của Lens mình chợt nhận thấy rằng thật ra thằng Lens nó đang trick một cách khá thú vị, nó đã thực hiện tạo ra một pods tại kube-system có name là node-shell và thực hiện access vào pods đó bằng câu lệnh exec bình thường, ở đây mình sẻ show ra cho các bạn thấy file yaml quan trọng để thực hiện tạo ra con pod đó nhé.

Pod:
apiVersion: v1
kind: Pod
metadata:
  generateName: shell-node-
  namespace: kube-system
  labels:
    plugin: shell-node
spec:
  nodeName: node-name
  containers:
  - name: shell
    image: docker.io/alpine:latest
    imagePullPolicy: IfNotPresent
    command: ["nsenter"]
    args: ["-t", "1", "-m", "-u", "-i", "-n", "sleep", "10800"]
    tty: true
    stdin: true
    stdinOnce: true
    securityContext:
      privileged: true
    volumeMounts:
    - name: host
      mountPath: /host
  volumes:
  - name: host
    hostPath:
      path: /
  hostNetwork: true
  hostIPC: true
  hostPID: true
  restartPolicy: Never
  terminationGracePeriodSeconds: 0
  tolerations:
    - operator: "Exists"

Như các bạn đã thấy ở trên, chúng ta sẻ có những điểm quan trọng sau đây và mình sẽ giải thích sơ qua những điểm này thôi nhé

securityContext: (Cài đặt bảo mật cho container.)
     privileged: true (Cho phép container chạy với quyền đặc quyền)
Khi bạn thiết lập privileged là true trong một container Kubernetes, điều này có nghĩa là container đó được chạy với đặc quyền (privileged mode). Quyền này cho phép container truy cập và thực hiện các thao tác trên hệ thống host với mức độ quyền hạn cao hơn so với container thông thường.
hostNetwork, hostIPC, hostPID: Cho phép Pod chia sẻ network, IPC namespace và PID namespace với máy host.

Nghĩa là nó sẽ có quyền truy cập vào các namespace của hệ thống, bao gồm Network, Process (PID), và các IPC. Bỏ qua các hạn chế bảo mật thông thường của container, nó có quyền thực hiện các thay đổi trực tiếp trên hệ thống host, bao gồm cả việc sửa đổi các tập tin hệ thống, quản lý quyền truy cập và thậm chí khởi động lại hệ thống cũng được luôn. 

Và khi các bạn sử dụng nó thì cũng nên cẩn thận vì nó có thể làm tăng rủi ro bảo mật và an toàn hệ thống, do đó bạn cần phải sử dụng một cách hợp lý và chỉ khi thực sự cần thiết, ví dụ như các bạn cần truy cập vào nodes để làm một điều gì đó chẳng hạn như là clear cache v.v... Miễn sao các bạn hiểu các bạn đang làm gì là được vì lúc này các bạn đang giống như truy cập vào máy nodes thật sự 100% vậy.

tolerations: (Danh sách các tolerations cho phép Pod chạy trên các Node có tình trạng tương ứng)
  - operator: "Exists" (Tolerate bất kỳ tình trạng nào của Node)

Như vậy mình đã nói xong phần ý chính để hiểu được tại sao mà thằng Lens nó có thể access đến nodes rồi nhé, giờ thì tới lượt tools của mình, với tools của mình thì nó cũng được thực hiện tương tự giống như vậy.

Khi bạn muốn thực hiện connect tới node nào đó thì bạn lấy tên nodes và chạy lệnh sau
k8s-connect -n ip-2-2-2-2.ap-southeast-1.compute.internal

Các bạn có thể sử dụng -n hoặc node gì đó đều được và khi các bạn thực hiện thoát ra khỏi giao diện terminal thì pods sẻ tự động delete, mình sẻ để link Git ở phía dưới cho các bạn nhé.

Các bạn thực hiện chạy lệnh sau để thực hiện install nhé

CURL:
sudo curl -o- https://raw.githubusercontent.com/thanhphatit/k8s-connect/main/install.sh | /bin/bash
WGET:
sudo wget -q https://raw.githubusercontent.com/thanhphatit/k8s-connect/main/install.sh -O - | /bin/bash

Ở đây tùy vào máy bạn có curl hay wget thì sử dụng để cài, cảm ơn các bạn đã đọc bài viết, nhớ đừng access vào rồi rm -rf /* nhé :D nếu thương mình thì nhớ click quảng cáo cho mình có thêm động lực viết những bài khác nữa nhé, chứ dạo này tự nhiên lười quá hehe.

Nguồn: www.itblognote.com

Post a Comment

0 Comments