Kind 实验室:云原生安全闯关笔记

· 3 分钟 · 云安全

#云安全

目录

第一条命令:

% cubectl config current-context # 查看当前指向集群
kind-demo
% kubectl create namespace secure-lab # 创建一个用于实验的 namespace
namespace/secure-lab created

编辑一个yaml文件用于生成测试节点

apiVersion: v1
kind: Pod
metadata:
  name: seclab-server
  namespace: secure-lab
  labels:
    app: nginx   # 冒号后必须有空格
spec:
  containers:
  - name: seclab-ns
    image: nicolaka/netshoot
    command: ["sleep", "infinity"]   # 让容器不退出,方便后面 exec 进去测
---
apiVersion: v1
kind: Pod
metadata:
  name: seclab-client
  namespace: secure-lab
  labels:
    app: terminal
spec:
  containers:
  - name: seclab-cl
    image: nicolaka/netshoot
    command: ["sleep", "infinity"]

建议在执行前进行语法检查,确认无误后应用策略:

 % kubectl apply -f ./pods.yaml --dry-run -o yaml
...
...
 % kubectl apply -f ./pods.yaml
pod/seclab-server created
pod/seclab-client created

查看节点状态,发现两个节点的 Status 都是 ImagePullBackOff,说明启动存在问题。进一步进行状态查看。

 % kubectl get pods -n secure-lab -o wide                      
NAME            READY   STATUS             RESTARTS   AGE     IP           NODE                 NOMINATED NODE   READINESS GATES
seclab-client   0/1     ImagePullBackOff   0          3m38s   10.244.0.9   demo-control-plane   <none>           <none>
seclab-server   0/1     ImagePullBackOff   0          3m38s   10.244.0.8   demo-control-plane   <none>           <none>
 % kubectl describe pod seclab-server -n secure-lab            
Name:             seclab-server
Namespace:        secure-lab
Priority:         0
Service Account:  default
Node:             demo-control-plane/172.18.0.2
Start Time:       Sat, 07 Nov 2026 20:26:30 +0800
Labels:           app=nginx
Annotations:      <none>
Status:           Pending
IP:               10.244.0.8
IPs:
  IP:  10.244.0.8
Containers:
  seclab-ns:
    Container ID:  
    Image:         nicolaka/netshoot
    Image ID:      
    Port:          <none>
    Host Port:     <none>
    Command:
      sleep
      infinity
    State:          Waiting
      Reason:       ImagePullBackOff
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-2x966 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  kube-api-access-2x966:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    Optional:                false
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                  From               Message
  ----     ------     ----                 ----               -------
  Normal   Scheduled  3m40s                default-scheduler  Successfully assigned secure-lab/seclab-server to demo-control-plane
  Warning  Failed     3m9s                 kubelet            spec.containers{seclab-ns}: Failed to pull image "nicolaka/netshoot": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/nicolaka/netshoot:latest": failed to resolve reference "docker.io/nicolaka/netshoot:latest": failed to do request: Head "https://registry-1.docker.io/v2/nicolaka/netshoot/manifests/latest": dial tcp 162.125.32.12:443: i/o timeout
  Warning  Failed     2m9s                 kubelet            spec.containers{seclab-ns}: Failed to pull image "nicolaka/netshoot": rpc error: code = DeadlineExceeded desc = failed to pull and unpack image "docker.io/nicolaka/netshoot:latest": failed to resolve reference "docker.io/nicolaka/netshoot:latest": failed to do request: Head "https://registry-1.docker.io/v2/nicolaka/netshoot/manifests/latest": dial tcp 162.125.32.12:443: i/o timeout
  Warning  Failed     69s (x3 over 3m9s)   kubelet            spec.containers{seclab-ns}: Error: ErrImagePull
  Warning  Failed     69s                  kubelet            spec.containers{seclab-ns}: Failed to pull image "nicolaka/netshoot": rpc error: code = DeadlineExceeded desc = failed to pull and unpack image "docker.io/nicolaka/netshoot:latest": failed to resolve reference "docker.io/nicolaka/netshoot:latest": failed to do request: Head "https://registry-1.docker.io/v2/nicolaka/netshoot/manifests/latest": dial tcp 162.125.7.1:443: i/o timeout
  Normal   BackOff    42s (x4 over 3m9s)   kubelet            spec.containers{seclab-ns}: Back-off pulling image "nicolaka/netshoot"
  Warning  Failed     42s (x4 over 3m9s)   kubelet            spec.containers{seclab-ns}: Error: ImagePullBackOff
  Normal   Pulling    28s (x4 over 3m39s)  kubelet            spec.containers{seclab-ns}: Pulling image "nicolaka/netshoot"

发现Pods启动卡在了拉取镜像的阶段,尝试按照以下方法配置成国内的镜像源:

 % docker exec demo-control-plane containerd --version # 确认当前 docker 版本
containerd github.com/containerd/containerd v1.7.1 1677a17964311325ed1c31e2c0a3589ce6d5c30d
f145h@f145h-Lenovo-Legion ~/Documents/k8s/secure-lab
 % docker exec demo-control-plane cp /etc/containerd/config.toml /etc/containerd/config.toml.bak # 备份 config.toml 文件
 % docker exec -i demo-control-plane tee -a /etc/containerd/config.toml <<'EOF'
[plugins."io.containerd.grpc.v1.cri".registry]
  config_path = "/etc/containerd/certs.d"
EOF
[plugins."io.containerd.grpc.v1.cri".registry]
  config_path = "/etc/containerd/certs.d"
  
 % docker exec demo-control-plane mkdir -p /etc/containerd/certs.d/docker.io # 创建docker.io 文件夹
 % docker exec -i demo-control-plane tee /etc/containerd/certs.d/docker.io/hosts.toml <<'EOF'
server = "https://registry-1.docker.io"

[host."https://docker.1ms.run"]
  capabilities = ["pull", "resolve"]

[host."https://docker-0.unsee.tech"]
  capabilities = ["pull", "resolve"]
EOF

← 返回文章列表