iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0

今天繼續是考題的整理。

1. Secret 取得以及修改成Volume

(1) 取得 secret
(2) 修改為 volume 並且為 readonly 的形式

(1) 取得 secret

  • 透過 kubectl get pod 以及 kubectl get secret -o yaml 取得 pod 中所使用的 secret
  • 將取出的 secret 透過 base64 decode echo <base64 encode> | base64 -d

(2) 修改為 volume 並且為 readonly 的形式

在 k8s.io 中查詢 secret 並參考當中的結構做修改

apiVersion: v1
kind: Secret
metadata:
  name: dotfile-secret
data:
  .secret-file: dmFsdWUtMg0KDQo=
---
apiVersion: v1
kind: Pod
metadata:
  name: secret-dotfiles-pod
spec:
  volumes:
    - name: secret-volume
      secret:
        secretName: dotfile-secret
  containers:
    - name: dotfile-test-container
      image: registry.k8s.io/busybox
      command:
        - ls
        - "-l"
        - "/etc/secret-volume"
      volumeMounts:
        - name: secret-volume
          readOnly: true
          mountPath: "/etc/secret-volume"

2. 透過 seccomp 限制 syscall 使用

可在 k8s.io 中查詢 syscall 或者 seccomp 等關鍵字

(1) 可能會要求修改 seccomp profile,可直接參考官方文件修改
default 的配置檔位置會在 /var/lib/kubelet/seccomp/profiles/

(2) 在 pod 中加上 seccomp

apiVersion: v1
kind: Pod
metadata:
  name: audit-pod
  labels:
    app: audit-pod
spec:
  securityContext:
    seccompProfile:
      type: Localhost
      localhostProfile: profiles/audit.json
  containers:
  - name: test-container
    image: hashicorp/http-echo:1.0
    args:
    - "-text=just made some syscalls!"
    securityContext:
      allowPrivilegeEscalation: false

3. sbom

bom -h查看指令
需要注意有沒有限制要輸出的格式,如果是json會需要特別修改 --format
透過bom generate產生SPDX

4. Network Policy

至 k8s.io 中查詢 Network policy
有幾個需要注意:
(1) 名稱
(2) namesapce
(3) policy

  • 以下 policy 指的是 namesapce 或者 pod 符合就可以放行
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
  • 以下 policy 指的是且
    - namespaceSelector:
        matchLabels:
          project: myproject
    podSelector:    # 差異在此
        matchLabels:
          role: frontend
  • Deny all ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
spec:
  podSelector: {} # 所有pod
  policyTypes:
  - Ingress
  • Allow all ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-ingress
spec:
  podSelector: {} # 所有pod
  policyTypes:
  - Ingress
  ingress:
  - {}            # 所有規則

5. role

role 主要考試會有幾種
(1) 建立對應的權限

  • 不同服務會有不同的 api group ,可透過core api的關鍵字找到各個不同的 api group , 像是 replicaset, deployment 都是屬於 apps ;pod, configmap, secret, serviceaccount 都是屬於 core (apiGroups: [""])
    (2) role 與 clusterrole
    (3) user 使用 role 綁定的 group:如果要查詢不同的 user 有綁定在哪個 group 上時可以透過 role 查看

6. CiliumNetworkPolicy

Cilium 的 policy 主要會考怎麼建立 policy,這邊會是需要直接查看 cilium 的官方文件進行修改
書寫邏輯與 NetworkPolicy 相似,唯一不同的是 Cilium 可以使用反向禁止,像是使用ingressDeny,在使用的同時要注意 namespace

apiVersion: "cilium.io/v2"
kind: CiliumClusterwideNetworkPolicy
metadata:
  name: "external-lockdown"
spec:
  endpointSelector: {}
  ingressDeny:
  - fromEntities:
    - "world"
  ingress:
  - fromEntities:
    - "all"

7. kubesec

kubesec 主要是會要求用來掃描 pod 的 yaml 檔,看是否有不安全的配置並進行修改
會以以下指令進行掃描kubesec scan <yaml 名稱>

8. kube-api restrict

在 kube-apiserver 中會有幾種考題:
(1) 修改並設定強制 kubelet 訪問

--anonymous-auth=false
--enable-admission-plugins=NodeRestriction

修改後會需要透過指定 config 訪問

kubectl --kubeconfig=<path_to_file> get pods

(2) 查看/修改目前 config 配置
kubectl config get-contexts

(3) Apiserver 只能透過 Cluster IP 訪問而不是 NodePort
刪除會修改為0

--kubernetes-service-node-port=31000

9. Binaries check

透過 sha512sum <binary> 查看其 sha512 value

10. Runtime Class

直接在 k8s.io 查詢關鍵字配置


上一篇
[Day28] Exam Question Review
下一篇
[Day30] Review
系列文
我在 CKS 考完只拿 47% 後痛定思痛決定好好準備內容30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言