目录
前言
11. NetworkPolicy网络策略
12. Deployment暴露端口/创建Service
13. 创建Ingress
14. 创建pvc及挂载pvc的pod
17道真题难度等级
一级 rbac cpu 扩容 pod指定节点 pv pod日志 排障 查看可用节点 多容器pod 节点维护
二级 networkpolicy service ingress pvc
三级 sidecar 升级集群 备份还原etcd
本系列有三篇博客,本博客为第二篇,即二级难度篇。
CKA注意事项:CKA考试注意事项--考前必看!_luo_guibin的博客-CSDN博客
第一篇:CKA认证真题(1)-- 必考_luo_guibin的博客-CSDN博客
第二篇:CKA考试真题(2)_luo_guibin的博客-CSDN博客
第三篇:CKA认证真题(3)-- 绝对干货!_luo_guibin的博客-CSDN博客
Task
在现有的 namespace my-app 中创建一个名为 allow-port-from-namespace 的新 NetworkPolicy。
确保新的 NetworkPolicy 允许 namespace corp-net 中的 Pods 连接到 namespace echo 中的 Pods 的 9000 端口。
进一步确保新的 NetworkPolicy:
不允许对没有在监听 端口 9000 的 Pods 的访问
不允许非来自 namespace echo 中的 Pods 的访问
参考文档:网络策略 | Kubernetes
#删除egress部分,更改ingress相关参数
#答案
vi networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-from-namespace
namespace: echo #被访问者
spec:
podSelector:
matchLabels: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
project: corp-net #访问者
ports:
- protocol: TCP
port: 9000
kubectl apply -f networkpolicy.yaml
Task
请重新配置现有的 deployment front-end 以及添加名为 http 的端口规范来公开现有容器 nginx 的端口 80/tcp。
创建一个名为 front-end-svc 的新 service,以公开容器端口 http。
配置此 service,以通过各个 Pod 所在的节点上的 NodePort 来公开他们。
参考文档: 服务(Service) | Kubernetes
#edit deployment 然后添加端口信息,注意添加位置
#答案
kubectl edit deployment front-end
ports:
- containerPort: 80
name: http-web-svc
kubectl expose deployment front-end --type=NodePort --port=80 --target-port=80 --name=front-end-svc
#暴露服务后,检查一下 service 的 selector 标签是否正确,这个要与 deployment 的 selector 标签一致的。
kubectl get svc front-end-svc -o wide
kubectl get deployment front-end -o wide
#如果你 kubectl expose 暴露服务后,发现 service 的 selector 标签是空的,kubectl edit svc front-end-svc在 ports 这一小段下面添加 selector 标签
selector:
app: front-end
Task
如下创建一个新的 nginx Ingress 资源:
名称: ping
Namespace: ing-internal
使用服务端口 5678 在路径 /hello 上公开服务 hello
可以使用以下命令检查服务 hello 的可用性,该命令应返回 hello:
curl -kL
参考文档: Ingress | Kubernetes
ingressclass、ingress 写在同一个yaml文件中, ingressclass不需要更改内容。
vi ingress.yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
labels:
app.kubernetes.io/component: controller
name: nginx-example
annotations:
ingressclass.kubernetes.io/is-default-class: "true"
spec:
controller: k8s.io/ingress-nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ping
namespace: ing-internal #注意新增namespace
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx-example
rules:
- http:
paths:
- path: /hello
pathType: Prefix
backend:
service:
name: hello
port:
number: 5678
kubectl apply -f ingress.yaml
#检查
kubectl get ingress -n ing-internal
curl http://ingress-IP/hello
Task
创建一个新的 PersistentVolumeClaim:
名称: pv-volume
Class: csi-hostpath-sc
容量: 10Mi
创建一个新的 Pod,来将 PersistentVolumeClaim 作为 volume 进行挂载:
名称:web-server
Image:nginx
挂载路径:/usr/share/nginx/html
参考文档:配置 Pod 以使用 PersistentVolume 作为存储 | Kubernetes
#需要创建pvc和一个挂载pvc的pod
#答案
pv pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-volume
spec:
storageClassName: csi-hostpath-sc
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
pv pvc-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
volumes:
- name: task-pv-storage #与下面对应,可不更改
persistentVolumeClaim:
claimName: pv-volume #对应pvc.yaml的name
containers:
- name: nginx #容器名题目无要求可随意更改
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage #与上面对应,可不更改
kubectl apply -f pvc.yaml
kubectl apply -f pvc-pod.yaml