一、前言和感受
1.1、前言:
一同备考一同前进!!如有不当之处,欢迎指正!!
上期分享了PVC题目的环境准备和参考解法(https://blog.csdn.net/Daniel_mazy/article/details/158837137),有兴趣的同学欢迎参考。
这次向广大备考CKA同学们分享Gateway API题目的环境准备和参考解法,希望对备考CKA的同学们有帮助。
如果觉得看文章太繁琐太麻烦,我这里先直接把相关的yaml文件贴出来,有兴趣的可以自己搭一下环境、解一下题。ingress2gateway-pre.tar.gz
root@k8s-ub-m01:~/ap4# ls -la
total 3928
-rw-r–r– 1 root root 250 Mar 7 20:08 default-ingressclass.yaml
-rw-r–r– 1 root root 16257 Mar 7 19:56 deploy-ingress-nginx-control-org.yaml
-rw-r–r– 1 root root 930 Mar 7 19:38 deploy-nginx-http.yaml
-rw-r–r– 1 root root 399 Mar 7 20:11 ingress-test.yaml
-rw-r–r– 1 root root 3254555 Mar 7 19:15 install.yaml
-rw-r–r– 1 root root 159 Mar 7 19:19 quickstart.yaml
-rw-r–r– 1 root root 696473 Mar 7 19:01 standard-install.yaml
-rw-r–r– 1 root root 1025 Mar 7 19:41 tls.crt
-rw-r–r– 1 root root 976 Mar 7 19:41 tls.csr
-rw——- 1 root root 1704 Mar 7 19:41 tls.key
-rw-r–r– 1 root root 3775 Mar 7 19:42 web-cert.yaml
-rw-r–r– 1 root root 334 Mar 7 20:22 web-gateway.yaml
-rw-r–r– 1 root root 303 Mar 7 20:25 web-route.yaml
1.2、感受
Gateway api这个题的环境搭建和测试的准备工作没想到前前后后用了一周左右,一开始是准备迁移前的ingress环境,前端和后端都采用了自签的tls证书,后来发现cka的题干并没有硬性的要求,然后又改为仅仅是ingress部分采用了tls证书。
另外一个坑就是创建Gateway class资源前安装Gateway CRD和controller,其实官方有很多controller实现的推荐方案,主要尝试了Nginx Gateway Fabric、Lstio、Envoy Gateway,由于墙的原因,所以最终使用第三个方案完成了CKA考试题干所需的环境搭建。 回想整个过程,还是挺有收获的,为了一个具体实现(再现题干的环境)而不断尝试而最终解决问题。当然从另外一个角度也说明自己有不少还没有深入理解的内容。
二、k8s运行环境情况
2.1、详细环境情况信息如下:
(这里省略,可参考本系列之前的文章)
三、CKA练习环境Gateway API题型预准备
3.1、CKA题干
Gateway API

3.2、创建题干所要求的Ingress资源
创建名称为nginx-http的deploy、名称为nginx-http-svc的service、自定义的首页index.html
root@k8s-ub-m01:~/ap2# vim deploy-nginx-http.yaml
1 —
2 apiVersion: v1
3 kind: ConfigMap
4 metadata:
5 name: nginx-html-cmap
6 data:
7 index.html: |
8 Hello World ^^__^^ !! Need migrate to gateway api
9 —
10 apiVersion: apps/v1
11 kind: Deployment
12 metadata:
13 name: nginx-http
14 spec:
15 replicas: 1
16 selector:
17 matchLabels:
18 app: nginx-http
19 template:
20 metadata:
21 labels:
22 app: nginx-http
23 spec:
24 containers:
25 – name: nginx-container
26 image: registry.cncfstack.com/docker.io/library/nginx:1.17.2
27 ports:
28 – containerPort: 80
29 volumeMounts:
30 – name: html-volume
31 mountPath: /usr/share/nginx/html
32 volumes:
33 – name: html-volume
34 configMap:
35 name: nginx-html-cmap
36 —
37 apiVersion: v1
38 kind: Service
39 metadata:
40 name: nginx-http-svc
41 spec:
42 selector:
43 app: nginx-http
44 ports:
45 – name: http
46 port: 80
47 targetPort: 80
48 nodePort: 30080
49 protocol: TCP
50 type: NodePort
- 创建所需的deploy、service、configmap,并确认资源状态 root@k8s-ub-m01:~/ap4# kubectl apply -f deploy-nginx-http.yamlkubectl
configmap/nginx-html-cmap created
deployment.apps/nginx-http created
service/nginx-http-svc createdroot@k8s-ub-m01:~/ap4# kubectl get pod,deploy,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-http-797c498d46-qxbhw 1/1 Running 1 (11m ago) 100mNAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-http 1/1 1 1 100mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nginx-http-svc NodePort 10.50.69.25 <none> 80:30080/TCP 100m - 访问页面 root@k8s-ub-m01:~/ap4# curl 192.168.148.121:30080
Hello World ^^__^^ !! Need migrate to gateway apiroot@k8s-ub-m01:~/ap4# curl 10.50.69.25:80
Hello World ^^__^^ !! Need migrate to gateway api
3.3、创建自签证书和secret
- 生成ingress所需的私钥和自签名证书 # 生成私钥
openssl genrsa -out tls.key 2048# 创建证书签名请求(指定域名)
openssl req -new -key tls.key -out tls.csr \\
-subj \”/CN=gateway.web.k8s.local\” \\
-addext \”subjectAltName=DNS:gateway.web.k8s.local\”# 生成365天有效证书
openssl x509 -req -days 365 \\
-in tls.csr \\
-signkey tls.key \\
-out tls.crt - 创建保存证书的secret资源
