k8s学习-CKS真题-Runtime设置gVisor


题目

该 cluster 使用 containerd 作为 CRI 运行时。containerd 的默认运行时处理程序是 runc。
containerd 已准备好支持额外的运行时处理程序 runsc (gVisor)。
Task
使用名为 runsc 的现有运行时处理程序,创建一个名为 untrusted 的 RuntimeClass。
更新 namespace server 中的所有 Pod 以在 gVisor 上运行。
您可以在 /cks/gVisor/rc.yaml 中找到一个模版清单。

环境搭建

安装gVisor

  1. 使用以下命令下载gvisor安装包:
wget https://storage.googleapis.com/gvisor/releases/nightly/latest/runsc
  1. 将下载的文件重命名为runsc,并放在/usr/local/bin目录中:
mv runsc /usr/local/bin/runsc
  1. 为runsc文件赋予可执行权限:
chmod +x /usr/local/bin/runsc
  1. 运行以下命令以安装gvisor到docker:
/usr/local/bin/runsc install

在这里插入图片描述
安装到containerd
由于我的集群版本已经是v1.25了,改为了containerd,所以需要修改一下配置

vim /etc/containerd/config.toml

添加以下内容到配置中,与runc对齐

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runsc]
          runtime_type = "io.containerd.runsc.v1"

在这里插入图片描述
重启containerd

systemctl daemon-reload
systemctl  restart containerd

在这里插入图片描述
创建命名空间server并添加pod

kubectl create ns server
kubectl run nginx --image=nginx --dry-run=client -o yaml > nginx.yaml
kubectl create -f nginx.yaml -n server

解题

创建运行时untrusted

# RuntimeClass 定义于 node.k8s.io API 组
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
  # 用来引用 RuntimeClass 的名字
  # RuntimeClass 是一个集群层面的资源
  name: untrusted
# 对应的 CRI 配置的名称
handler: runsc
kubectl create -f untrusted.yaml 

在这里插入图片描述
修改Pod内容

kubectl get pod nginx -n server -o yaml > nginx_runtime.yaml

添加

runtimeClassName: untrusted

在这里插入图片描述
删除原来的再重建

kubectl delete po nginx -n server
kubectl create -f nginx_runtime.yaml -n server

在这里插入图片描述

参考

gVisor官网
k8s-运行时

更多k8s相关内容,请看文章:k8s学习-思维导图与学习笔记

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
以下是一些可能出现在CKS考试中的真题,以及对应的详细答案: 1. 如何禁用Kubernetes API Server的匿名访问? 答:可以通过修改Kubernetes API Server的配置文件来禁用匿名访问。具体方法如下: 在Kubernetes API Server的配置文件中添加以下选项: ``` - --anonymous-auth=false ``` 然后重新启动Kubernetes API Server即可。 2. 如何配置Kubernetes API Server使用TLS证书进行双向认证? 答:可以通过修改Kubernetes API Server的配置文件来配置TLS证书进行双向认证。具体方法如下: 首先,生成CA证书和服务器证书: ``` $ openssl genrsa -out ca.key 2048 $ openssl req -new -key ca.key -out ca.csr $ openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt $ openssl genrsa -out server.key 2048 $ openssl req -new -key server.key -out server.csr $ openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -out server.crt ``` 然后,在Kubernetes API Server的配置文件中添加以下选项: ``` - --tls-cert-file=server.crt - --tls-private-key-file=server.key - --client-ca-file=ca.crt - --tls-cert-file=server.crt - --tls-private-key-file=server.key ``` 最后,重新启动Kubernetes API Server即可。 3. 如何为Kubernetes Pod中的应用程序提供安全的服务发现? 答:可以通过使用Kubernetes的Service来为Pod中的应用程序提供安全的服务发现。具体方法如下: 首先,创建一个Service,并将其类型设置为ClusterIP: ``` apiVersion: v1 kind: Service metadata: name: my-service spec: type: ClusterIP ports: - name: http port: 80 targetPort: 8080 ``` 然后,在Pod的配置文件中添加以下环境变量: ``` env: - name: MY_SERVICE_HOST value: my-service - name: MY_SERVICE_PORT value: "80" ``` 这样,在Pod中就可以通过访问MY_SERVICE_HOST和MY_SERVICE_PORT来访问Service提供的服务了。 4. 如何保护Kubernetes Pod中的敏感信息? 答:可以通过使用Kubernetes的Secret来保护Pod中的敏感信息。具体方法如下: 首先,创建一个Secret对象,并将需要保护的密钥和值存储在其中: ``` apiVersion: v1 kind: Secret metadata: name: my-secret type: Opaque data: username: dXNlcm5hbWU= password: cGFzc3dvcmQ= ``` 接着,在Pod的配置文件中使用该Secret: ``` apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: my-image env: - name: DB_USERNAME valueFrom: secretKeyRef: name: my-secret key: username - name: DB_PASSWORD valueFrom: secretKeyRef: name: my-secret key: password ``` 这样,在Pod中就可以通过访问DB_USERNAME和DB_PASSWORD来访问Secret中存储的敏感信息了。 5. 如何检查Kubernetes集群中的Pod是否使用了最新的安全补丁? 答:可以通过使用Kubernetes的SecurityContext来检查Pod是否使用了最新的安全补丁。具体方法如下: 首先,在Pod的配置文件中添加以下SecurityContext: ``` securityContext: runAsNonRoot: true readOnlyRootFilesystem: true allowPrivilegeEscalation: false ``` 然后,在容器中运行以下命令: ``` apt-get update apt-get upgrade ``` 这样就可以检查Pod中的容器是否使用了最新的安全补丁。 6. 如何限制用户在Kubernetes集群中的访问权限? 答:可以通过使用Kubernetes的Role和RoleBinding来限制用户在Kubernetes集群中的访问权限。具体方法如下: 首先,创建一个Role对象,指定该对象可以访问的资源和操作: ``` apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: my-role rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"] ``` 接着,创建一个RoleBinding对象,将该Role对象绑定到指定的用户或组: ``` apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: my-role-binding subjects: - kind: User name: my-user roleRef: kind: Role name: my-role apiGroup: rbac.authorization.k8s.io ``` 这样,用户my-user就可以访问该Role对象指定的资源和操作了。 7. 如何配置Kubernetes集群的网络策略以保护Pod之间的通信? 答:可以通过使用Kubernetes的NetworkPolicy来配置网络策略以保护Pod之间的通信。具体方法如下: 首先,创建一个NetworkPolicy对象,指定该对象可以访问的Pod标签和端口: ``` apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: my-network-policy spec: podSelector: matchLabels: app: my-app ingress: - from: - podSelector: matchLabels: role: my-role ports: - protocol: TCP port: 80 ``` 然后,在Pod的配置文件中添加以下标签: ``` metadata: labels: app: my-app role: my-role ``` 这样,只有包含标签app=my-app且来自Pod标签为role=my-role的流量才可以访问Pod。 8. 如何为Kubernetes集群中的节点和Pod提供安全的存储? 答:可以通过使用Kubernetes的StorageClass和PersistentVolumeClaim来为集群中的节点和Pod提供安全的存储。具体方法如下: 首先,创建一个StorageClass对象,指定该对象可以使用的存储类型和访问模式: ``` apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-storage-class provisioner: my-provisioner parameters: type: my-type accessMode: ReadWriteOnce ``` 然后,在Pod的配置文件中创建一个PersistentVolumeClaim对象,用于申请存储: ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: my-storage-class ``` 这样,Pod就可以通过挂载PersistentVolumeClaim来访问安全的存储了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lady_killer9

感谢您的打赏,我会加倍努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值