安装ingress-nginx

在github上搜索ingress-nginx

https://github.com/kubernetes/ingress-nginx

找到适合自己k8s版本的ingress-nginx版本

 进入deploy

 点击这个 /docs/deploy

 找到这个deploy文件,注意不能直接执行这个文件,因为镜像源在国外,无法直接部署,需要先把这个文件下载下来,然后修改image的地址:

修改前

修改后 

 这里的仓库地址我个人阿里云的仓库。

 然后修改如下部分:

externalTrafficPolicy: Cluster 由Local改为Cluster
type: LoadBalancer # 注意此处

改完就可以执行kubectl  apply  -f   deploy.yaml部署了。

查看部署状态

这里看到两个 Completed 状态的 Pod:

ingress-nginx-admission-create-xxx
ingress-nginx-admission-patch-xxx
这是因为是 Job 类型的 Pod,它们在执行完自己的任务之后会自动退出,显示为 Completed 状态,这种行为是 正常的。

解释:
在安装 ingress-nginx 时,安装脚本会自动创建两个 Job:

ingress-nginx-admission-create

ingress-nginx-admission-patch

它们用于:

创建 Webhook 所需的 admission 资源。

给 webhook 配置证书(patch)。

这些是一次性执行的任务,执行成功后就终止,Pod 状态会变为 Completed,不会一直运行。

而这个 Pod:
ingress-nginx-controller-xxx
才是实际负责处理 Ingress 请求的 nginx controller,它是一个 Deployment 控制的长期运行服务,正常情况下状态是 Running。

总结:
Completed 状态的 Pod:Job 类型,用于初始化配置(如 Admission webhook)。

Running 状态的 Pod:实际的 nginx ingress controller,处理 Ingress 流量。

你现在可以创建 Ingress 资源测试流量转发了

这里创建一个测试的ingress

假设已经有一个部署在 nginx命名空间下、服务名为 my-nginx 的服务,监听的是 80 端口。

 

前提条件检查
ingress-nginx-controller 已正常运行 

 

Cluster 中已有服务 my-app 可访问(你可以用 kubectl get svc 查看)

 

ingress class 配置为 nginx(默认是 nginx,继续用这个)

 

创建ingress资源的yaml

 

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
  namespace: nginx
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: myapp.local   # 域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-nginx
            port:
              number: 80

测试访问(本地测试)
如果你在本地测试,可以通过修改本机 /etc/hosts 文件,让 myapp.local 指向某个 Node IP,例如:

192.168.1.100   myapp.local
然后在浏览器或 curl 中访问:

http://myapp.local/
nginx.ingress.kubernetes.io/rewrite-target: / 是可选的,表示会把 /xxx 重写为 / 发给后端服务。

ingressClassName: nginx 是告诉 k8s 使用哪个 Ingress Controller(你的就是 nginx)。

 

posted @ 2025-05-07 10:59  羊脂玉净瓶  阅读(42)  评论(0)    收藏  举报