CKAD-CN 考试知识点分享(9) 创建 ingress
您必须连接到正确的主机。不这样做可能导致零分。
[candidate@base] $ ssh ckad00025
任务目标
在 namespace: external
中,已有一个 Web 应用通过 Service web-app
在端口 8080
上提供服务。
需要创建一个名为 web-app-ingress
的 Ingress 资源,实现:
- 使用域名
external.sterling-bengal.local
公开应用; - 所有以
/
开头的请求都路由到web-app
服务; - 使用正确的
IngressClass
; - 可通过
curl -L external.sterling-bengal.local
访问。
步骤一:确认可用的 IngressClass
首先查看集群中可用的 IngressClass
:
kubectl get ingressclass
输出示例:
NAME CONTROLLER
nginx k8s.io/ingress-nginx
traefik traefik.io/ingress-controller
✅ 记录下正确的名称(如
traefik
或nginx
),注意拼写。
请务必使用实际存在的 IngressClass
名称。
步骤二:创建 Ingress 资源清单
创建文件 web-app-ingress.yaml
:
vim web-app-ingress.yaml
✅ 正确配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: web-app-ingressnamespace: externalannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:ingressClassName: traefik rules:- host: external.sterling-bengal.localhttp:paths:- path: /pathType: Prefixbackend:service:name: web-appport:number: 8080
🔍 说明:
ingressClassName
: 必须与kubectl get ingressclass
输出一致(如traefik
);host
: 指定访问域名;path: /
且pathType: Prefix
表示所有以/
开头的路径都会被路由;service.name: web-app
,端口8080
;- 注解
rewrite-target
确保路径正确转发(可选但推荐)。
步骤三:应用 Ingress 配置
kubectl apply -f web-app-ingress.yaml
步骤四:验证 Ingress 是否创建成功
kubectl get ingress -n external
输出示例:
NAME CLASS HOSTS ADDRESS PORTS AGE
web-app-ingress traefik external.sterling-bengal.local 10.100.200.10 80 30s
✅ 确认
HOSTS
正确,且CLASS
匹配。
步骤五:测试访问(题目提示)
在集群节点或配置了 Hosts 的客户端上执行:
curl -L external.sterling-bengal.local
预期输出:应返回 Web 应用的响应内容(如 HTML 页面或状态信息)。
💡 如果无法解析域名,可临时添加 Hosts:
echo "10.100.200.10 external.sterling-bengal.local" | sudo tee -a /etc/hosts
常见错误排查
问题 | 解决方法 |
---|---|
404 Not Found | 检查 host 是否匹配,Service 名称和端口是否正确 |
502 Bad Gateway | 检查后端 Pod 是否正常运行,Service 是否选中 Pod |
Ingress 无 ADDRESS | 等待或检查 Ingress Controller 是否运行正常 |
Error: schema disagreement | 确保 ingressClassName 存在且拼写正确 |
总结
- ✅ 创建了名为
web-app-ingress
的 Ingress; - ✅ 使用正确的
ingressClassName
(应为traefik
,非traefix
); - ✅ 配置了
external.sterling-bengal.local
域名路由; - ✅ 所有
/
路径请求转发到web-app:8080
; - ✅ 可通过
curl
成功访问。
✅ 任务完成。