1、 RBAC
设置配置环境:
[student@node-1] $ kubectl config use-context k8s
Context
为部署流水线创建一个新的ClusterRole并将其绑定到范围为特定的 namespace 的特定ServiceAccount。
Task
创建一个名为deployment-clusterrole且仅允许创建以下资源类型的新ClusterRole:
Deployment
StatefulSet
DaemonSet
在现有的 namespace app-team1中创建一个名为cicd-token的新 ServiceAccount。
限于 namespace app-team1中,将新的ClusterRole deployment-clusterrole绑定到新的 ServiceAccount cicd-token
切换集群
kubectl config use-context k8s
开始操作
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,statefulsets,daemonsets
kubectl -n app-team1 create serviceaccount cicd-token
# 题目中要求“限于namespace app-team1中”,则创建rolebinding。没有要去,则创建clusterrolebinding。
# rolebinding后面的名字cicd-token-rolebinding随便起的,因为题目中没有要求,如果题目中有要求,就不能随便起了。
kubectl -n app-team1 create rolebinding cicd-token-rolebinding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token
检查
kubectl -n app-team1 describe rolebinding cicd-token-rolebinding
参考连接:http://kubernetes.io/zh/docs/reference/access-authn-authz/rbac
2、查看 pod 的 CPU
设置配置环境:
[student@node-1] $ kubectl config use-context k8s
Task
通过 pod label name=cpu-loader,找到运行时占用大量 CPU 的 pod,
并将占用 CPU 最高的 pod 名称写入文件 /opt/KUTR000401/KUTR00401.txt(已存在)。
开始操作
# kubectl config use-context k8s
# 查看pod名称 -A是所有namespace
kubectl top pod -l name=cpu-loader --sort-by=cpu -A
# 将cpu占用最多的pod的name写入/opt/test1.txt文件
echo "查出来的Pod Name" > /opt/KUTR000401/KUTR00401.txt
检查
cat /opt/KUTR000401/KUTR00401.txt
3、 NetworkPolicy
Task - 1(可能会考的问题1)
设置配置环境:
[student@node-1] $ kubectl config use-context hk8s
在现有的namespace my-app中创建一个名为allow-port-from-namespace的新NetworkPolicy。
确保新的NetworkPolicy允许namespace echo中的Pods连接到namespace my-app中的Pods的9000端口。
进一步确保新的NetworkPolicy:
不允许对没有在监听 端口9000的Pods的访问
不允许非来自 namespace echo中的Pods的访问
[root@k8s-master cka]
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-from-namespace
namespace: my-app
spec:
podSelector:
matchLabels: {
}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
project: echo
ports:
- protocol: TCP
port: 9000
Task - 2(可能会考的问题2)
设置配置环境:
[student@node-1] $ kubectl config use-context hk8s
在现有的namespace internal中创建一个名为allow-port-from-namespace-2的新NetworkPolicy。
确保新的NetworkPolicy允许命名空间internal中的Pods能访问相同命名空间下的所有Pods的8080端口。
进一步确保新的NetworkPolicy:
不允许对没有在监听 端口8080的Pods的访问
不允许非来自 namespace internal中的Pods的访问
[root@k8s-master cka]
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-from-namespace-2
namespace: internal
spec:
podSelector:
matchLabels: {
}
policyTypes:
- Ingress
ingress:
- from:
- podSelector: {
}
ports:
- protocol: TCP
port: 8080
参考连接:http://kubernetes.io/zh/docs/concepts/services-networking/network-policies
4、暴露服务 service
设置配置环境:
[student@node-1] $ kubectl config use-context k8s
Task
请重新配置现有的部署front-end以及添加名为http的端口规范来公开现有容器 nginx 的端口80/tcp。
创建一个名为front-end-svc的新服务,以公开容器端口http。
配置此服务,以通过在排定的节点上的 NodePort 来公开各个 Pods。
开始操作