CKAD-2026-Ingress

这道题主要是考察ingress的知识:

主要知识背景:url->ingress->service->pod

"路径错、后端名错、端口错、标签错"

更顺口一点:

"路名端口标,依次查四错"

  • 路 :Ingress 的 path 错误

  • 名 :Ingress 的 backend.service.name 错误

  • 端 :Service 的 targetPort 错误

  • 标 :Service 的 selector 标签错误

1. URL → Ingress 环节:Ingress 的 path 错误

  • 错误现象 :用户使用 curl -L http://content-marlin.local/ 访问根路径 /,但请求无法被 Ingress 正确路由。

  • 原因 :原 Ingress 配置中的 path 可能设置为 /content-marlin 或其他错误值,而不是 /。

    Deployment 容器探针的 path 为 /,且题目要求的访问地址为根路径,因此 Ingress 必须匹配 / 才能将请求转发给后端。

  • 修复 :将 Ingress 的 path 改为 /。


2. Ingress → Service 环节:Ingress 的 backend.service.name 错误

  • 错误现象:Ingress 匹配到请求后,无法找到正确的 Service 转发流量。

  • 原因 :原 Ingress 中 backend.service.name 指向的 Service 名称与实际创建的 Service 名称(nginx-ing-svc)不一致(例如可能写成了其他名字)。

  • 修复 :将 Ingress 的 service.name 改为 nginx-ing-svc。


3. Service → Pod 环节(端口部分):Service 的 targetPort 错误

  • 错误现象:Service 收到流量后,无法将请求转发到 Pod 的正确端口。

  • 原因 :原 Service 的 targetPort 与 Deployment 中 Pod 的 containerPort(值为 80)不匹配(例如可能是 8080 或其他端口)。

  • 修复 :将 Service 的 targetPort 改为 80。


4. Service → Pod 环节(选择器部分):Service 的 selector 错误

  • 错误现象:Service 无法找到任何可用的 Pod,因为标签选择器没有匹配到任何 Pod。

  • 原因 :原 Service 的 selector 中标签与 Deployment 中 Pod 模板的标签(app: nginx-ing)不一致(例如可能写成了 app: nginx 或其他值)。

  • 修复 :将 Service 的 selector 改为 app: nginx-ing。

用户请求 http://content-marlin.local/content-marlin

│

▼

┌─────────────┐

│ Ingress │ ← 域名 + 路径匹配规则

│ nginx-ingress-test │

└──────┬──────┘

│ 转发到 Service

▼

┌─────────────┐

│ Service │ ← 固定 ClusterIP,负载均衡

│ (名字随意) │

└──────┬──────┘

│ 通过标签选择器匹配 Pod

▼

┌─────────────┐

│ Pod │ ← 标签 app: nginx-ing

│ (Deployment 创建) │

└─────────────┘

  1. Ingress 排错

Task

在 namespace content-marlin 下,名为 content-marlin-demployment 的 Deployment 通过 Ingress nginx-ingress-test 公开。

您可以在目录 /home/student/content-marlin-demployment 中找到 deployment、service、ingress 的清单文件。

Deployment 本应可以通过http://content-marlin.local/content-marlin正常访问,但是目前返回错误。

通过更新相关资源,来识别并修复问题,以便 Deployment 按计划可以被正常访问。

请注意,这道题的 deployment 是正确的,请不要修改 deployment。

最后,你可以使用命令来检测 curl -L http://content-marlin.local/

【1】 按照题目要求,在master 节点上执行,切换到题目要求节点

ssh ckad000000

【2】 因为题目告知了 deployment 是正确的,所以我们先看一下 deployment 配置信息。

cat /home/student/content-marlin-demployment/deployment.yaml

内容如下

bash 复制代码
apiVersion: apps/v1

kind: Deployment

metadata:

  name: content-marlin-demployment

  namespace: content-marlin

spec:

  replicas: 1

  selector:

    matchLabels:

      app: nginx-ing字

  template:

    metadata:

      labels:

        app: nginx-ing  ## 3 ## 记住 Deployment 里 template 下的标签名

    spec:

      containers:

      - name: nginx

        image: vicuu/nginx:hello

        imagePullPolicy: IfNotPresent

        ports:

        - containerPort: 80 ## 1 ## 记住 Deployment 的容器的端口号,因为题目说明了 Deployment 是正确的。

        startupProbe:

          httpGet:

            path: / ## 2 ## 记住这个 path 的地址,这里是 /

            port: 80

          failureThreshold: 30

          periodSeconds: 10

【3】 修改 service 配置文件

vim /home/student/content-marlin-demployment/service.yaml

修改内容为下面红色字体

bash 复制代码
apiVersion: v1

kind: Service

metadata:

  name: nginx-ing-svc # 记住 Service 里的这个 name

  namespace: content-marlin

  labels:

    app: nginx

spec:

  ports:

  - port: 80

    targetPort: 80 # 修改 Service 的 targetPort 端口与上面 Deployment 的 containerPort 端口号一致,即修改为 80

    protocol: TCP

  selector:

app: nginx-ing # 这里要修改为 Deployment 里的 template 下的那个标签名字。Service 通过选择标签跟 Deployment 建立关联

编辑完后,按 ESC,再按 :wq 保存退出

【4】 修改 ingress 配置文件

修改 ingress 配置文件,并重新创建 ingress。

vim /home/student/content-marlin-demployment/ingress.yaml

修改内容为下面红色字体

bash 复制代码
apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

  name: nginx-ingress-test

  namespace: content-marlin

spec:

  ingressClassName: traefix

  rules:

  - http:

      paths:

      - path: / # 这里要修改为 Deployment 里 那个 path 地址,也就是 /

        pathType: Prefix

        backend:

          service:

            name: nginx-ing-svc # 这里要修改成 Service 里的 name。因为 Ingress 通过 Service 的 name 建立关联。

            port:

              number: 80

编辑完后,按 ESC,再按 :wq 保存退出

【5】 创建 service 和 ingress

kubectl apply -f /home/student/content-marlin-demployment/service.yaml

kubectl apply -f /home/student/content-marlin-demployment/ingress.yaml

【6】 按照题目里要求的网址检测,是否能正常访问,模拟环境加上30080,与之前一样,404即为正常。

curl -L http://content-marlin.local:30080/

相关推荐
姜鱼问生3 分钟前
docker exec 排查容器问题:从日志到进程
运维·网络·数据库·docker·容器
qq_5434478214 分钟前
DNS解析怎么排查?故障处理与运维实用手册
运维·服务器·网络·php
DeviceHub15 分钟前
AI服务器电源设计进阶:TLVR电感的应用解析与选型验证指南
运维·服务器·人工智能
Apipi*16 分钟前
30天速通Linux 第七章进程间通信
linux·运维·服务器
迪康软件zz32 分钟前
终端审批体系怎么搭?从模板配置到业务连续性
运维·安全·自动化运维
科技研学社40 分钟前
中小服装工装厂自动化改造:产线节拍平衡与工位减负实施方案
运维·自动化
极光通讯43 分钟前
服务器内存替代料选型方法论:主料号缺货时如何找到Pin-to-Pin兼容型号
运维·服务器
草根大哥43 分钟前
08-横向扩容与突发高并发:加机器到底买到了什么
运维·webrtc·srt·横向扩容·whip·自建cdn
oicola1 小时前
【运维】CI/CD是什么,合格的规范应该怎么设置
运维·ci/cd
Dachui_11221 小时前
内网穿透如何限制访问地区?ZeroNews Geo Location 区域访问控制实践
运维·网络安全·内网穿透·访问控制·远程办公·api安全·ip白名单