当前位置: 首页 > news >正文

K8S中Ingress的采用

1. Ingress的介绍

1.1 Pod 的漂移

Kubernetes 具有强大的副本控制能力,能保证在任意副本(Pod)挂掉时自动从其他机器启动一个新 的,还可以动态扩容等,通俗地说,这个 Pod 可能在任何时刻出现在任何节点上,也可能在任何时刻死 在任何节点上;那么自然随着 Pod 的创建和销毁,Pod IP 肯定会动态变化;那么如何把这个动态的 Pod IP 暴露出去?这里借助于 Kubernetes 的 Service 机制,Service 可以以标签的形式选定一组带有指定标签的 Pod,并监控和自动负载他们的 Pod IP,那么我们向外暴露只暴露 Service IP 就行了;这就是 NodePort 模式:即在每个节点上开起一个端口,然后转发到内部 Pod IP 上。

客户端请求-->node 节点的 ip:端口--->service 的 ip:端口--->pod 的 ip:端口

1.2 Ingress 介绍

Ingress 官网定义:Ingress 可以把进入到集群内部的请求转发到集群中的一些服务上,从而可以把服务映射到集群外部。Ingress 能把集群内 Service 配置成外网能够访问的 URL,流量负载均衡,提供基于 域名访问的虚拟主机等。

1.3 Ingress Controller 介绍

Ingress Controller 是一个七层负载均衡调度器,客户端的请求先到达这个七层负载均衡调度器,由七层 负载均衡器在反向代理到后端 pod,常见的七层负载均衡器有 nginx、traefik,以我们熟悉的 nginx 为 例,假如请求到达 nginx,会通过 upstream 反向代理到后端 pod 应用,但是后端 pod 的 ip 地址是一 直在变化的,因此在后端 pod 前需要加一个 service,这个 service 只是起到分组的作用,那么我们 upstream 只需要填写 service 地址即可。

1.4 Ingress 和 Ingress Controller 总结

Ingress Controller 可以理解为控制器,它通过不断的跟 Kubernetes API 交互,实时获取后端 Service、Pod 的变化,比如新增、删除等,结合 Ingress 定义的规则生成配置,然后动态更新上边的 Nginx 或者 trafik 负载均衡器,并刷新使配置生效,来达到服务自动发现的作用。

Ingress 则是定义规则,通过它定义某个域名的请求过来之后转发到集群中指定的 Service。它可以通过 Yaml 文件定义,可以给一个或多个 Service 定义一个或多个 Ingress 规则。

2. Ingress 完整实战指南

2.1 获取官方部署文件

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

## 获取文件 我这里的文件版本是 1.5.1
curl -O https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.1/deploy/static/provider/baremetal/deploy.yaml

2.2 部署前修改YAML文件

## 1. 这里我修改了nodePort的端口范围,在command的字段下面添加如下参数
[root@k8s-master /etc/kubernetes/manifests]# grep    service-node-port kube-apiserver.yaml- --service-node-port-range=80-32767
## 2. 重启kube-apiserver
## 下载的 deploy.yaml 包含完整的 RBAC、Deployment 等配置。默认使用 LoadBalancer 类型 Service,需要改为 NodePort.
...
---
apiVersion: v1
kind: Service
metadata:labels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/component: controllername: ingress-nginx-controllernamespace: ingress-nginx
spec:type: NodePortports:- name: httpport: 80protocol: TCPtargetPort: httpnodePort: 80- name: httpsport: 443protocol: TCPtargetPort: httpsnodePort: 443selector:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/component: controller
...
---

2.3 部署controller

# 1. 直接应用部署后的yaml文件
[root@k8s-master /manifests/ingress]# kubectl  apply -f deployment.yaml
# 2. 查看pod状态
[root@k8s-master /manifests/ingress]# kubectl get pods -n ingress-nginx
NAME                                       READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-89769d8f9-kjcsg   1/1     Running   0          32m
# 3. 检查 service
[root@k8s-master /manifests/ingress]# kubectl get svc -n ingress-nginx
NAME                       TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                 AGE
ingress-nginx-controller   NodePort   10.200.132.122           80:80/TCP,443:443/TCP   33m
# 4. 查看 controller 日志
[root@k8s-master /manifests/ingress]# kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx -f

3. 创建测试应用

3.1 部署应用v1

[root@k8s-master /manifests/ingress]# cat tomcat-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: ingress-tomcat
spec:replicas: 2selector:matchLabels:app: tomcattemplate:metadata:labels:app: tomcatspec:containers:- name: tomcatimage: 192.168.0.77:32237/library/tomcat:alpineports:- name: httpcontainerPort: 8080name: ajpcontainerPort: 8009
---
apiVersion: v1
kind: Service
metadata:name: service-tomcat
spec:selector:app: tomcatports:- name: httptargetPort: 8080port: 8080- name: ajptargetPort: 8009port: 8009
## 检查 pod 和 service
[root@k8s-master /manifests/ingress]# kubectl  get pod,svc

4. 核心ingress的配置

4.1 基础单路由配置

[root@k8s-master /manifests/ingress]# cat ingress-basic.yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:name: tomcat
spec:controller: k8s.io/ingress-nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: basic-ingressnamespace: default
spec:## ingressClassName 要一直ingressClassName: tomcat## 定义后端转发的规则rules:## #通过域名进行转发- host: tomcat.lucky.comhttp:paths:- path: /pathType: Prefix## 配置后端服务backend:## service的名称要一直service:name: service-tomcatport:number: 8080
## 检查ingress
[root@k8s-master /manifests/ingress]# kubectl  get ingress
NAME            CLASS    HOSTS              ADDRESS         PORTS   AGE
basic-ingress   tomcat   tomcat.lucky.com   192.168.0.162   80      7m11s
[root@k8s-master /manifests/ingress]# kubectl  describe ingress basic-ingress

4.2 访问

--- 1. 在window的电脑上修改hosts文件:
C:\
Windows\System32\drivers\etc
--- 2. 管理员打开hosts 文件,增加一下内容
192.168.0.162 tomcat.lucky.com
--- 3. 浏览器域名访问

4.3 Ingress 的https代理配置

--- 1. 创建自签证书(测试用)
[root@k8s-master /manifests/ingress]# openssl req -x509 -nodes -days 365 -newkey rsa:2048   -keyout tls.key -out tls.crt   -subj "/CN=tomcat.lucky.com"
--- 2. 创建 Secret
[root@k8s-master /manifests/ingress]# kubectl create secret tls tomcat-ingress-secret    --cert=tls.crt --key=tls.key  --namespace=default
-- 3. 查看
[root@k8s-master /manifests/ingress]# kubectl  describe  secret tomcat-ingress-secret
--- 4. 修改yaml文件
[root@k8s-master /manifests/ingress]# cat ingress-basic-tls.yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:name: tomcat
spec:controller: k8s.io/ingress-nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: basic-ingressnamespace: default
spec:ingressClassName: tomcat## 添加tls信息tls:- hosts:- tomcat.lucky.com## secret 名称secretName: tomcat-ingress-secretrules:- host: tomcat.lucky.comhttp:paths:- path: /pathType: Prefixbackend:service:name: service-tomcatport:number: 8080
--- 4. 浏览器通过https的方式访问

如果想详细了解更多知识的小伙伴可以参考我的个人博客:

https://xingzhibang.top/

http://www.rkmt.cn/news/74978.html

相关文章:

  • 进程监控:通过 SSH 远程监测嵌入式设备进程重启
  • 【ZeroRange WebRTC】对称加密 vs 非对称加密(从原理到实践) - 详解
  • 2025.12.6日21:24-incapacity无能力
  • 百度统计、Google Analytics平替开源网站分析工具:Umami - 教程
  • 舆情处置高效的技术深度解析:Infoseek 字节探索的 AI 闭环架构与实现逻辑
  • FPS的实时处理能力
  • 数字马力一面-后端开发郑州岗(校招)
  • 详细介绍:中颖AFE芯片:SH367303、SH367306 和 SH367309
  • 主动学习如何优化计算机视觉工作流程
  • 英语_阅读_Heroes come in all ages_待读
  • 收敛至约0.28
  • Scoop 软件清单与配置信息
  • 我不玩了
  • 英语_错题集_2512
  • 深度学习第一周
  • 课后作业10
  • 装饰器模式
  • 2025年靠谱的轮胎品牌哪家好?口碑好的轮胎品牌哪家好?官方精选可靠品牌指南
  • 权重衰减
  • 2025年中国前五轮胎品牌:权威TOP10轮胎榜单发布
  • 读大话数据结构的总结1
  • 作业4
  • 2026年网络安全展望:AI加速、攻击面扩张与专业化红队的未来
  • 接入Impala、Hive 的报表、BI、数据中台的国内厂商评价及接口框架
  • 完整教程:用Python识别图片中的文字(Tesseract OCR)
  • 个人健康体系|健康管理|基于java+Android+微信小工具的个人健康系统设计与实现(源码+数据库+文档)
  • Yolov5 使用手册
  • AI搜索浪潮下的geo优化先锋:2025年值得关注的服务商清单
  • 2025.12.6-原来要使用md格式
  • 3D模型在线转换