CKA
互联网最全cka真题解析-2022.9.9
目录
[toc]
我的CKA证书
1、CKA真题解析
kubectl自动补全及帮助信息
1、配置kubectl自动补全
apt install bash-completion
source <(kubectl completion bash)
2、kubectl explans 帮助信息
3、kubectl 命令 -h 帮助信息
4、官网
https://kubernetes.io/
第1题 RBAC 授权(强制记忆,3条命令)
考点:RBAC 授权模型的理解。
考题
参考链接
没必要参考网址,使用-h 帮助更方便。
kubectl create clusterrole -h
kubectl create serviceaccount -h
kubectl create rolebinding -h
https://kubernetes.io/docs/reference/access-authn-authz/rbac/#command-line-utilities
https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/
解答
- 考题答案
1、切换环境
kubectl config use-context kubernetes
2、配置
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,daemonsets,statefulsets
kubectl create serviceaccount cicd-token -n app-team1
# 题目中写了“限于 namespace app-team1 中”,则创建 rolebinding。没有写的话,则创建 clusterrolebinding。
kubectl create rolebinding cicd-token-rolebinding --serviceaccount=app-team1:cicd-token --clusterrole=deployment-clusterrole -n app-team1
# rolebinding 后面的名字 cicd-token-rolebinding 随便起的,因为题目中没有要求,如果题目中有要求,就不能随便起了。
3、验证
#稍微验证下
kubectl describe rolebinding cicd-token-rolebinding -napp-team1
注意:我们可以用describle
命令看下刚才新建的rolebinding
来验证下:
- 答题技巧
#说明:
解题三步骤:
1.创建clusterrole
2.创建serviceaccount
3.将新的clusterrole绑定到新的serviceaccount :rolebinding
1.之前我们是通过yaml文件进行创建的,这次通过命令行进行创建;(直接强制记忆就好;)
2.从书签链接可以找到一些命令,但是尽量建议熟悉记忆上面3条命令,直接敲出来即可;(直接搜索`一些命令行工具`关键字即可)
此题注意事项:
一般来水,如下是对应绑定的:(但是也可以rolebinding和clusterrole对应)
role --> rolebinding 有ns之说
clusterrole --> clusterrolebinding 无ns之说
serviceaccount 有ns之说
第2题 统计使用 CPU 最高的 Pod(强制记忆,送分题
)
考点:kubectl top -l 命令的使用
考题
参考链接
没必要参考网址,使用-h 帮助更方便。
kubectl top pod -h
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#interacting-with-running-pods
解答
1、切换环境
kubectl config use-context kubernetes
2、配置
kubectl top pod -l name=cpu-utilizer --sort-by="cpu" -A #-A是所有namespace 不要忘记写哦,-l也要记得写哦。。。
echo "<podname>" > /opt/KUR00401.txt # 将第一个 Pod 名称写到文件
#写完后记得检查下那个保存结果的文件
3、验证
cat /opt/KUR00401.txt
- 答题技巧
metric-server已经准备好了,我们不用管;
第3题 网络策略(拷贝yaml)📍(注意yaml位置)
(考题知识点:kubernetes安全章节/网络策略)7'
考题
双重否定就是肯定,所以最后两句话的意思就是: 仅允许端口为 8080 的 pod 访问。 仅允许 my-app命名空间中的 pod 访问。
码的,这个翻译起来真的有点别扭。。。。。
参考链接
解答
- 原课件答案
1、切换环境
kubectl config use-context hk8s
2、配置
#如果访问者的 namespace 没有标签 label,则需要手动打一个。如果有一个独特的标签 label,则也可以直接使用。
给命名空间打标签:kubectl label namespace big-corp name=big-corp
编写一个 yaml 文件
vim networkpolicy.yaml
#注意 :set paste,防止 yaml 文件空格错序。
apiVersion: networking.kubernetes.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-from-namespace
namespace: my-app #被访问者的命名空间
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: big-corp #访问者的命名空间的标签
ports:
- protocol: TCP
port: 8080 #被访问者公开的端口
kubectl apply -f networkpolicy.yaml
3、验证
kubectl get networkpolicy -nmy-app
- 答题技巧
这个题也是争议比较大,这个题目翻译后比较模糊,先按照下面答案来做就行。这个题一直也没变过;直接从官方yaml拷贝过来,删除没用的,修改为题目要求的,就好;
- 官方yaml
apiVersion: networking.kubernetes.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
删除egress,ingress里的ipBlock,podSelector部分,修改spec.podSelector后面为空。
📍 另一个版本
检查:
第4题 SVC 暴露应用(强制记忆)
考点:将现有的 deploy 暴露成 nodeport 的 service。
考题
参考链接
强制记忆即可。