使用Ingress发布应用程序

使用Ingress发布应用程序

文章目录

  • 使用Ingress发布应用程序
    • @[toc]
    • 一、什么是Ingress
    • 二、定义Ingress
    • 三、什么是Ingress控制器
    • 四、部署nginx Ingress控制器
      • 1.了解nginx Ingress控制器的部署方式
      • 2.安装nginx Ingress控制器
      • 3.本地实际测试
    • 五、使用Ingress对外发布应用程序
      • 1.使用Deployment和Service部署和发布应用程序
      • 2.使用Ingress对外发布上述Service
      • 3.访问Ingress发布的应用程序

一、什么是Ingress

Ingress可以理解成Kubernetes集群的“智能交通指挥系统”。就像商场入口的导览员会根据顾客需求指引不同店铺一样,Ingress的作用是管理外部流量,把用户请求准确引导到集群内的各个服务。

举个更生活化的例子:假设你的Kubernetes集群是一个大型游乐园,里面有多个游乐项目(服务)。Ingress就是游乐园的检票口和导览地图,它的工作分为两个部分:

  1. 规则手册(Ingress资源):由管理员编写,比如规定“从东门来的游客去摩天轮,通过官网预约的游客去过山车”。
  2. 执行者(Ingress控制器):像检票员一样实时检查游客请求,根据规则手册把请求转发到对应项目。比如看到带有“摩天轮预约码”的游客,就打开通往摩天轮的通道。

它的三大核心能力:

  • 智能分流:根据域名(如shop.com去商城服务)或路径(如/api去后台服务)分流请求,避免所有流量挤在同一个入口。
  • 安全保障:统一处理SSL证书(类似给所有游客发放加密手环),外部流量经过Ingress后自动解密,内部服务无需单独处理加密。
  • 负载调节:像热门项目增加检票通道一样,自动将大量请求分摊到多个服务实例,防止单个服务被压垮。

简单来说,Ingress让外部用户访问集群服务变得像用手机导航一样方便——你只需要输入目的地(域名或路径),剩下的路线规划(流量路由)和安全检查(SSL)都由它自动完成。

二、定义Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /  # 路径重写注解(Nginx控制器专用)
spec:ingressClassName: nginx  # 指定使用的Ingress控制器类型[^2]rules:- host: example.com  # 域名匹配规则http:paths:- path: /service1  # URL路径匹配pathType: Prefix  # 路径类型(Prefix/Exact/ImplementationSpecific)backend:service:name: service1  # 后端服务名称port:name: http  # 服务端口名称(或直接指定number: 80)- path: /service2pathType: Prefixbackend:service:name: service2port:number: 8080  # 直接指定端口号
  • annotations:控制器专属配置(如路径重写、限流等),需参考具体控制器文档。
  • ingressClassName:指定匹配的Ingress控制器(需与集群中已部署的IngressClass一致)。
  • pathType:定义路径匹配规则,Prefix表示前缀匹配(如/service1/会匹配/service1/xxx)。
  • backend:指定流量路由的后端服务及端口(支持端口名称或数字)。

三、什么是Ingress控制器

Ingress控制器可以理解为Kubernetes集群的“智能流量调度员”。它的作用类似于快递站的分拣机器人,专门负责把外部的访问请求(比如用户通过浏览器发送的请求)准确快速地分发到集群内部对应的服务。

举个生活化的例子:

假设你网购了一件商品,快递站收到包裹后需要分拣到不同区域的快递柜:

  1. Ingress资源像是你填写的快递单,上面写着「收件地址:5号楼3层」;
  2. Ingress控制器就是分拣机器人,它读取快递单信息后,自动把包裹投递到正确的位置。

三大核心职责:

  1. 流量导航
    根据规则(如域名shop.com或路径/images)把请求导向对应服务,就像快递机器人根据地址匹配快递柜。例如:
    • 访问www.example.com/video → 视频服务
    • 访问www.example.com/news → 新闻服务
  2. 安全守护
    统一处理HTTPS加密(类似给快递包裹加装防拆封条),外部流量经过控制器解密后,内部服务无需单独处理加密。
  3. 负载调节
    像热门快递柜增加分拣通道一样,自动将大量请求分摊到多个服务实例,防止单个服务崩溃。

与其他组件的区别:

  • Ingress资源 vs 控制器
    规则说明书 vs 执行者。用户编写Ingress资源定义路由规则(YAML文件),控制器实时读取并执行这些规则。
  • 与传统负载均衡器的区别
    传统设备需要手动配置,而Ingress控制器能自动感知服务变化(如新增实例),动态调整路由。

部署小知识:

  • 必须安装:就像快递站没有分拣机器人包裹会堆积一样,Kubernetes默认不带控制器,需额外部署(如Nginx、Traefik等)。

  • 多种选择

    :不同控制器特性不同,比如:

    • Nginx控制器:适合高并发场景(类似大型分拣中心)
    • Traefik控制器:配置更简单,适合动态调整(类似灵活的小型分拣车)

简单来说,有了Ingress控制器,外部用户访问集群服务就像收快递一样方便——你只需要告诉它「送到哪里」(域名或路径),剩下的分拣、安全和调度都由这个「智能调度员」搞定。

四、部署nginx Ingress控制器

1.了解nginx Ingress控制器的部署方式

以下是 Nginx Ingress 控制器的 主要部署方式 及其适用场景,结合不同环境和需求进行说明:


  1. 通用部署:基于官方 YAML 文件

适用场景:快速部署、测试环境或小规模集群。
操作步骤

  1. 下载官方提供的

    mandatory.yaml
    

    文件(对应不同版本):

    wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.5/deploy/static/provider/cloud/deploy.yaml
    
  2. 执行部署命令:

    kubectl apply -f deploy.yaml
    

核心组件

  • 创建 ingress-nginx 命名空间
  • 部署 nginx-ingress-controller 的 Deployment 或 DaemonSet
  • 配置 RBAC 权限、ConfigMap 等
    特点:简单快捷,但需自行处理外部访问(如 NodePort 或 LoadBalancer)。

  1. 高性能部署:DaemonSet + HostNetwork

适用场景:生产环境、高并发或对网络延迟敏感的场景。
操作步骤

  1. 修改 mandatory.yaml,将 Deployment 改为 DaemonSet,并启用 hostNetwork: true

  2. 通过标签筛选节点,部署到专用边缘节点:

    # DaemonSet配置示例
    spec:template:spec:hostNetwork: true  # 使用宿主机网络tolerations:       # 允许调度到Master节点(可选)- key: node-role.kubernetes.io/mastereffect: NoSchedule
    

优点

  • 绕过 NodePort,减少网络转发层级,提升性能
  • 直接使用节点 IP 和端口(80/443),避免端口冲突
    缺点:需手动管理节点和负载均衡器绑定。

  1. 云服务商集成:LoadBalancer 自动绑定

适用场景:公有云环境(如 AWS、腾讯云、阿里云)。
操作步骤

  1. 部署 Nginx Ingress 控制器后,创建 LoadBalancer 类型的 Service:

    apiVersion: v1
    kind: Service
    metadata:name: ingress-nginx
    spec:type: LoadBalancer  # 云平台自动创建负载均衡器ports:- port: 80targetPort: 80
    
  2. 云平台自动分配外部 IP,流量直达 Ingress Pod(若支持 VPC-CNI 直连 Pod 更优)。
    特点

  • 全托管负载均衡,支持自动扩缩容
  • 部分云平台支持直通 Pod(如腾讯云 VPC-CNI 模式),避免 NodePort 瓶颈。

  1. 高可用部署:多副本 + 节点调度

适用场景:需高可靠性的生产环境。
操作步骤

  1. 扩增控制器副本数:

    kubectl scale --replicas=3 deployment/nginx-ingress-controller -n ingress-nginx
    
  2. 通过节点亲和性(Affinity)或污点(Taint)分散 Pod:

    # 示例:限制Pod仅部署在专用节点
    spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: ingress-nodeoperator: Invalues: ["true"]
    

优化点

  • 副本数建议与节点数一致,避免单点故障
  • 结合 HPA(Horizontal Pod Autoscaler)实现自动扩缩容。

  1. Operator 模式部署

适用场景:需要声明式管理和高级定制的场景。
操作步骤

  1. 安装 Nginx Ingress Operator(如通过 Helm 或直接部署):

    git clone https://github.com/nginxinc/nginx-ingress-helm-operator
    make deploy IMG=nginx/nginx-ingress-operator:1.2.0
    
  2. 通过自定义资源(CRD)管理 Ingress 配置。
    特点

  • 简化生命周期管理(如证书更新、配置热加载)
  • 支持更复杂的路由策略和监控集成。

部署方式对比与选型建议

方式适用场景优点缺点
官方 YAML测试/小规模简单快速需手动处理外部访问
DaemonSet + HostNetwork高性能生产环境低延迟、高吞吐需维护节点和负载均衡器绑定
云服务商 LoadBalancer公有云环境全托管、自动扩缩容依赖云平台特性
Operator 模式复杂路由/声明式管理灵活定制、自动化运维学习成本较高

建议

  • 公有云用户优先选择云平台集成方案(如腾讯云“指定节点池 DaemonSet 部署”);
  • 自建集群推荐 DaemonSet + HostNetwork 或高可用 Deployment;
  • 需要深度定制时考虑 Operator 模式。

注意事项

  1. 版本兼容性:确保 Ingress 控制器版本与 Kubernetes 集群兼容(如 1.26+ 需特定镜像)。
  2. 证书管理:通过 Secret 存储 TLS 证书,并在 Ingress 中引用。
  3. 安全加固:关闭非必要端口,避免使用 NodePort 暴露过多服务。

通过以上方式,可根据实际需求灵活部署 Nginx Ingress 控制器,实现高效、安全的流量管理。

2.安装nginx Ingress控制器

在K8S集群中安装nginx Ingress控制器一般不需要进行额外配置,主要有两种方法:一种是使用Helm工具基于Chart文件安装,另一种是使用kubect apply命令基于YAML格式的配置文件安装。考虑到国内的网络环境,这里采用第2种方法安装。

(1)为了将该控制器部署到指定节点,执行以下命令为该节点设置标签

[root@master ~]# kubectl label node node2 ingress=true
node/node2 labeled

(2)从nginx Ingress控制器官网下载YAML格式的配置文件deploy.yaml,本例下载的是1.7.1版本的配置文件,将该文件更名

[root@master ~]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.1/deploy/static/provider/cloud/deploy.yaml
--2025-04-19 16:30:40--  https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.1/deploy/static/provider/cloud/deploy.yaml
正在解析主机 raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.111.133, ...
正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:15704 (15K) [text/plain]
正在保存至: “deploy.yaml”deploy.yaml                    100%[===================================================>]  15.34K  49.5KB/s  用时 0.3s    2025-04-19 16:30:43 (49.5 KB/s) - 已保存 “deploy.yaml” [15704/15704])
[root@master ~]# mv deploy.yaml ingress-nginx-controller.yaml

(3)修改该文件,替换其中的镜像仓库的地址,所涉及的3个镜像修改如下

[root@master ~]# cat -n ingress-nginx-controller.yaml
......440            value: /usr/local/lib/libmimalloc.so441          # image: registry.k8s.io/ingress-nginx/controller:v1.7.0@sha256:7612338342a1e7b8090bef78f2a04fffcadd548ccaabe8a47bf7758ff549a5f7442          image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.7.0......538                fieldPath: metadata.namespace539          # image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20230312-helm-chart-4.5.2-28-g66a760794@sha256:01d181618f270f2a96c04006f33b2699ad3ccb02da48d0f89b22abce084b292f540          image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1541          imagePullPolicy: IfNotPresent......588                fieldPath: metadata.namespace589          # image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20230312-helm-chart-4.5.2-28-g66a760794@sha256:01d181618f270f2a96c04006f33b2699ad3ccb02da48d0f89b22abce084b292f590          image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1......

官方给出的YAML配置文件中拉取的镜像来自registry.k8s.io仓库,Docker Hub并不提供该仓库,从国内拉取这些镜像就会报错(ErrImagePull)。解决的方法是使用国内可访问的镜像仓库代替,本例使用阿里云提供的镜像仓库。

(4)针对部署方式涉及的DaemonSet和HostNetwork定义,继续修改以上文件中名为ingress-nginx-controller的Deployment配置部分相关内容

[root@master ~]# cat -n ingress-nginx-controller.yaml
......
390  ---391  apiVersion: apps/v1392  # kind: Deployment393  kind: DaemonSet                         # 将类型由Deployment改为DaemonSet394  metadata:......401    name: ingress-nginx-controller402    namespace: ingress-nginx497        # 将ClusterFirst改为ClusterFirstWithHostNet,使nginx可以解析集群内部名称498        # dnsPolicy: ClusterFirst499        dnsPolicy: ClusterFirstWithHostNet500        nodeSelector:501        # kubernetes.io/os: linux502          ingress: "true"                 # 选择部署的节点改为此项设置503        hostNetwork: true                 # 此项设置是增加的,表示启用主机网络

(5)基于该配置文件创建nginx Ingress控制器

[root@master ~]# kubectl create -f ingress-nginx-controller.yaml 
namespace/ingress-nginx created
serviceaccount/ingress-nginx created
serviceaccount/ingress-nginx-admission created
role.rbac.authorization.k8s.io/ingress-nginx created
role.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrole.rbac.authorization.k8s.io/ingress-nginx created
clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission created
rolebinding.rbac.authorization.k8s.io/ingress-nginx created
rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
configmap/ingress-nginx-controller created
service/ingress-nginx-controller created
service/ingress-nginx-controller-admission created
daemonset.apps/ingress-nginx-controller created
job.batch/ingress-nginx-admission-create created
job.batch/ingress-nginx-admission-patch created
ingressclass.networking.k8s.io/nginx created
validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission created

该配置文件除了定义了Deployment(本例已改为DaemonSet)和Service外,还定义了名称空间、服务账号等配套的Kubernetes对象。所创建的对象都属于ingress-nginx名称空间。

(6)查看相关的Pod部署和运行情况

[root@master ~]# kubectl  get pods --namespace=ingress-nginx -o wide
NAME                                   READY   STATUS      RESTARTS   AGE   IP               NODE    NOMINATED NODE   READINESS GATES
ingress-nginx-admission-create-mw29n   0/1     Completed   0          90s   10.244.166.130   node1   <none>           <none>
ingress-nginx-admission-patch-gl8x4    0/1     Completed   0          90s   10.244.166.129   node1   <none>           <none>
ingress-nginx-controller-9pfcj         0/1     Running     0          90s   192.168.10.32    node2   <none>           <none>

可以发现,nginx Ingress控制器最终在node2节点上运行,其他两个pod已经结束运行,说明仅是部署过程中所需执行的程序。

(7)查看相关的service的运行情况

[root@master ~]# kubectl get svc -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.102.234.10   <pending>     80:31156/TCP,443:31454/TCP   3m2s
ingress-nginx-controller-admission   ClusterIP      10.101.83.6     <none>        443/TCP                      3m1s

(8)在集群内部访问该控制器发布的服务进行测试

[root@master ~]# curl 192.168.10.32
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

可以发现,该控制器就是一个nginx服务器,生成有默认的后端Pod,直接访问节点主机会返回404错误。

3.本地实际测试

完成上述安装后,可以创建简单的Ingress进行实际测试

(1)创建一个运行简单Web服务器的Deployment和相应的Service

[root@master ~]# kubectl create deployment demo --image=httpd --port=80
deployment.apps/demo created
[root@master ~]# kubectl expose deployment demo
service/demo exposed

(2)创建Ingress,下面的例子使用映射到本地主机的主机

[root@master ~]# kubectl create ingress demo-localhost --class=nginx --rule="demo.localdev.me/*=demo:80"
ingress.networking.k8s.io/demo-localhost created

(3)将一个本地端口转发到Ingress控制器

[root@master ~]# kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80
Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80
Handling connection for 8080

(4)在控制平面节点上测试

[root@master ~]# curl demo.localdev.me:8080
<html><body><h1>It works!</h1></body></html>

结果显示,可以通过Ingress访问后端的服务。

(5)删除创建的Ingress和Deployment及Service

[root@master ~]# kubectl delete ingress demo-localhost
ingress.networking.k8s.io "demo-localhost" deleted
[root@master ~]# kubectl delete deploy/demo svc/demo
deployment.apps "demo" deleted
service "demo" deleted

五、使用Ingress对外发布应用程序

部署了nginx Ingress控制器之后就可以使用Ingress对外发布应用程序

1.使用Deployment和Service部署和发布应用程序

由Ingress发布的是Service定义的应用程序,首先要创建Service。这里分别为nginx和Tomcat两个Web服务器创建Service以用于示范。

(1)编写nginx的Deployment和Service配置文件,将其命名为nginx-foringress.yaml。

[root@master ~]# vim nginx-foringress.yaml
[root@master ~]# cat nginx-foringress.yaml 
apiVersion: apps/v1                # 版本号
kind: Deployment                    # 类型为Deployment
metadata:                            # 元数据name: nginx-deploy          labels:                             # 标签app: nginx-deploy
spec:                                 # 详细信息replicas: 2                        # 副本数量selector:                          # 选择器,指定该控制器管理哪些PodmatchLabels:                     # 匹配规则app: nginx-podtemplate:                          # 定义模板,当副本数量不足时会根据模板定义创建Pod副本metadata:labels:app: nginx-pod                    # Pod的标签spec:containers:                     # 容器列表(本例仅定义一个容器)- name: nginx                   # 容器的名称image: nginx:1.14.2          # 容器所用的镜像ports:- name: nginx-portcontainerPort: 80         # 容器需要暴露的端口---
apiVersion: v1
kind: Service
metadata:name: nginx-svc      #设置service的显示名字
spec:ports:- port: 80              #让集群知道service绑定的端口targetPort: 80           #目标Pod的端口selector:app: nginx-pod  #指定pod的标签[root@master ~]# 

(2)编写Tomcat的Deployment和Service文件,将其命名为tomcat-foringress.yaml

[root@master ~]# vim tomcat-foringress.yaml
[root@master ~]# cat tomcat-foringress.yaml 
apiVersion: apps/v1                # 版本号
kind: Deployment                    # 类型为Deployment
metadata:                            # 元数据name: tomcat-deploy
spec:replicas: 3selector:                         # 选择器,指定该控制器管理哪些PodmatchLabels:app: tomcat-podtemplate:metadata:labels:app: tomcat-podspec:containers:- name: tomcatimage: tomcat:8.0-alpine          # 容器所用的镜像ports:- containerPort: 8080           # 容器需要暴露的端口---
apiVersion: v1
kind: Service
metadata:name: tomcat-svc      #设置service的显示名字
spec:selector:app: tomcat-pod           # 指定pod的标签ports:- port: 8080              #让集群知道service绑定的端口targetPort: 8080           #目标Pod的端口

(3)执行创建

[root@master ~]# kubectl apply -f nginx-foringress.yaml 
deployment.apps/nginx-deploy created
service/nginx-svc created
[root@master ~]# kubectl apply -f tomcat-foringress.yaml 
deployment.apps/tomcat-deploy created
service/tomcat-svc created

(4)查看Service列表,可以发现新创建的两个Service的类型都是默认的ClusterIP,只能在集群内部访问

[root@master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP    27d
nginx-svc    ClusterIP   10.110.223.241   <none>        80/TCP     89s
tomcat-svc   ClusterIP   10.98.106.182    <none>        8080/TCP   80s

2.使用Ingress对外发布上述Service

用Service发布的应用程序可以通过Ingress基于HTTP或HTTPS进一步对外发布,这需要创建Ingress。

(1)编写定义Ingress配置文件,将其命名为http-ingress.yaml

[root@master ~]# vim http-ingress.yaml
[root@master ~]# cat http-ingress.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: http-ingress
spec:ingressClassName: nginxrules:- host: nginx.abc.com                  # 域名http:paths:- path: /pathType: Prefixbackend:service:name: nginx-svcport: number: 80- host: tomcat.abc.com                  # 域名http:paths:- path: /pathType: Prefixbackend:service: name: tomcat-svcport:number: 8080

这里定义了两个后端Service,由不同的域名进行转发。

(2)基于上述文件Ingress配置文件创建Ingress

[root@master ~]# kubectl apply -f http-ingress.yaml 
ingress.networking.k8s.io/http-ingress created

(3)查看Ingress

[root@master ~]# kubectl get ing -o wide
NAME           CLASS   HOSTS                          ADDRESS   PORTS   AGE
http-ingress   nginx   nginx.abc.com,tomcat.abc.com             80      41s

(4)查看创建的Ingress的详细信息

[root@master ~]# kubectl describe ing http-ingress
Name:             http-ingress
Labels:           <none>
Namespace:        default
Address:          
Ingress Class:    nginx
Default backend:  <default>
Rules:Host            Path  Backends----            ----  --------nginx.abc.com   /   nginx-svc:80 (10.244.104.4:80,10.244.166.132:80)tomcat.abc.com  /   tomcat-svc:8080 (10.244.104.5:8080,10.244.166.133:8080,10.244.166.134:8080)
Annotations:      <none>
Events:Type    Reason  Age   From                      Message----    ------  ----  ----                      -------Normal  Sync    2m2s  nginx-ingress-controller  Scheduled for sync

可以发现,该Ingress提供两个路由规则,分别指向后端nginx和Tomcat这两个Service,每个Service都有各自的Pod副本。

3.访问Ingress发布的应用程序

在控制平面上编辑域名解析

[root@master ~]# vim /etc/hosts
[root@master ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.30 master
192.168.10.31 node1
192.168.10.32 node2 nginx.abc.com tomcat.abc.com

验证

[root@master ~]# curl nginx.abc.com
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@master ~]# curl tomcat.abc.com
......<h1>Apache Tomcat/8.0.53</h1>......

可以发现,Ingress根据不同的域名转发到不同后端的应用程序,证明已经成功地部署了Ingress。

删除本例所有对象

[root@master ~]# kubectl delete -f http-ingress.yaml 
ingress.networking.k8s.io "http-ingress" deleted
[root@master ~]# kubectl delete -f tomcat-foringress.yaml 
deployment.apps "tomcat-deploy" deleted
service "tomcat-svc" deleted
[root@master ~]# kubectl delete -f nginx-foringress.yaml 
deployment.apps "nginx-deploy" deleted
service "nginx-svc" deleted

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/77622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络编程】TCP数据流套接字编程

目录 一. TCP API 二. TCP回显服务器-客户端 1. 服务器 2. 客户端 3. 服务端-客户端工作流程 4. 服务器优化 TCP数据流套接字编程是一种基于有连接协议的网络通信方式 一. TCP API 在TCP编程中&#xff0c;主要使用两个核心类ServerSocket 和 Socket ServerSocket Ser…

力扣刷题Day 21:两数之和(1)

1.题目描述 2.思路 暴力解法虽然不超时间限制&#xff0c;但是题解实在太妙了&#xff0c;哈希大法好&#xff01; 3.代码&#xff08;Python3&#xff09; class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hash_table dict()for i, num i…

关于UE5的抗锯齿和TAA

关于闪烁和不稳定现象的详细解释 当您关闭抗锯齿技术时&#xff0c;场景中会出现严重的闪烁和不稳定现象&#xff0c;尤其在有细节纹理和小物体的场景中。这种现象的技术原因如下&#xff1a; 像素采样问题 在3D渲染中&#xff0c;每个像素只能表示一个颜色值&#xff0c;但…

【MySQL】MySQL建立索引不知道注意什么?

基本原则&#xff1a; 1.选择性原则&#xff1a; 选择高选择性的列建立索引(该列有大量不同的值) 2.适度原则&#xff1a;不是越多越好&#xff0c;每个索引都会增加写入开销 列选择注意事项&#xff1a; 1.常用查询条件列&#xff1a;WHERE字句中频繁使用的列 2.连接操作列…

Vue3 + TypeScript中provide和inject的用法示例

基础写法&#xff08;类型安全&#xff09; typescript // parent.component.vue import { provide, ref } from vue import type { InjectionKey } from vue// 1. 定义类型化的 InjectionKey const COUNTER_KEY Symbol() as InjectionKey<number> const USER_KEY Sy…

树莓派超全系列教程文档--(33)树莓派启动选项

树莓派启动选项 启动选项start_file &#xff0c;fixup_filecmdlinekernelarm_64bitramfsfileramfsaddrinitramfsauto_initramfsdisable_poe_fandisable_splashenable_uartforce_eeprom_reados_prefixotg_mode &#xff08;仅限Raspberry Pi 4&#xff09;overlay_prefix配置属…

java怎么找bug?Arthas原理与实战指南

Arthas原理与实战指南 1. Arthas简介 Arthas是阿里巴巴开源的Java诊断工具&#xff0c;其名字取自《魔兽世界》的人物阿尔萨斯。它面向线上问题定位&#xff0c;被广泛应用于性能分析、定位问题、安全审计等场景。Arthas的核心价值在于它能够在不修改应用代码、不重启Java进程…

Python自学第1天:变量,打印,类型转化

突然想学Python了。经过Deepseek的推荐&#xff0c;下载了一个Python3.12安装。安装过程请自行搜索。 乖乖从最基础的学起来&#xff0c;废话不说了&#xff0c;上链接&#xff0c;呃&#xff0c;打错了&#xff0c;上知识点。 变量的定义 # 定义一个整数类型的变量 age 10#…

基于STM32中断讲解

基于STM32中断讲解 一、NVIC讲解 简介&#xff1a;当一个中断请求到达时&#xff0c;NVIC会确定其优先级并决定是否应该中断当前执行的程序&#xff0c;以便及时响应和处理该中断请求。这种设计有助于提高系统的响应速度和可靠性&#xff0c;特别是在需要处理大量中断请求的实…

游戏盾和高防ip有什么区别

游戏盾和高防IP都是针对网络攻击的防护方案&#xff0c;但​​核心目标、技术侧重点和应用场景存在显著差异​​。以下是两者的详细对比分析&#xff1a; ​​一、核心定位与目标​​ ​​维度​​​​高防IP​​​​游戏盾​​​​核心目标​​抵御大流量网络攻击&#xff08…

Spark-SQL3

Spark-SQL 一.Spark-SQL核心编程&#xff08;四&#xff09; 1.数据加载与保存&#xff1a; 1&#xff09;通用方式&#xff1a; SparkSQL 提供了通用的保存数据和数据加载的方式。这里的通用指的是使用相同的API&#xff0c;根据不同的参数读取和保存不同格式的数据&#…

DeepSeek与Napkin:信息可视化领域的创新利器

摘要 在数字化信息爆炸的时代&#xff0c;如何高效地组织思路并将其转化为直观、清晰的可视化图表&#xff0c;成为众多领域面临的关键问题。本文深入剖析了DeepSeek与Napkin这两款工具&#xff0c;详细探讨它们在信息处理与可视化过程中的功能特性、协同工作机制、应用场景、…

conda 创建、激活、退出、删除环境命令

参考博客&#xff1a;Anaconda创建环境、删除环境、激活环境、退出环境 使用起来觉得有些不方便可以改进&#xff0c;故写此文。 1. 创建环境 使用 -y 跳过确认 conda create -n 你的环境名 -y 也可以直接选择特定版本 python 安装&#xff0c;以 3.10 为例&#xff1a; co…

嵌入式芯片中的 低功耗模式 内容细讲

电源域与运行级别概述 电源域&#xff08;Power Domain&#xff09; 核心域&#xff08;Core Domain&#xff09;&#xff1a;包括 CPU 核心和关键架构模块&#xff08;如 NVIC、CPU 内核寄存器&#xff09;。 外设域&#xff08;Peripheral Domain&#xff09;&#xff1a;…

Java中常见的锁synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock

在Java中&#xff0c;锁是实现多线程同步的核心机制。不同的锁适用于不同的场景&#xff0c;理解其实现原理和使用方法对优化性能和避免并发问题至关重要。 一、隐式锁&#xff1a;synchronized 关键字 实现原理 基于对象监视器&#xff08;Monitor&#xff09;&#xff1a;每…

@JsonView + 单一 DTO:如何实现多场景 JSON 字段动态渲染

JsonView 单一 DTO&#xff1a;如何实现多场景 JSON 字段动态渲染 JsonView 单一 DTO&#xff1a;如何实现多场景 JSON 字段动态渲染1、JsonView 注解产生的背景2、为了满足不同场景下返回对应的属性的做法有哪些&#xff1f;2.1 最快速的实现则是针对不同场景新建不同的 DTO…

Etcd 压缩整理

etcd数据存储 在实际生产中使用 ETCD 存储元数据&#xff0c;起初集群规模不大的时候元数据信息不多没有发现什么问题。随着集群规模越来越大&#xff0c;可能引发存储问题。 —auto-compaction-retention 由于ETCD数据存储多版本数据&#xff0c;随着写入的主键增加历史版本需…

【更新完毕】2025妈妈杯C题 mathercup数学建模挑战赛C题数学建模思路代码文章教学:音频文件的高质量读写与去噪优化

完整内容请看文章最下面的推广群 我将先给出文章、代码、结果的完整展示, 再给出四个问题详细的模型 面向音频质量优化与存储效率提升的自适应编码与去噪模型研究 摘 要 随着数字媒体技术的迅速发展&#xff0c;音频处理技术在信息时代的应用愈加广泛&#xff0c;特别是在存储…

React-请勿在循环或者条件语句中使用hooks

这是React Hooks的首要规则&#xff0c;这是因为React Hooks 是以单向循环链表的形式存储&#xff0c;即是有序的。循环是为了从最后一个节点移到一个节点的时候&#xff0c;只需通过next一步就可以拿到第一个节点&#xff0c;而不需要一层层回溯。React Hooks的执行&#xff0…

【大模型】 LangChain框架 -LangChain实现问答系统

LangChain 介绍与使用方法 1. 什么是 LangChain&#xff1f;2. LangChain 的主要功能3. 如何使用 LangChain&#xff1f;3.1 环境准备3.2 基本使用示例3.2.1 简单的问答系统3.2.2 结合外部工具 3.3 高级用法 4. 常见问题及解决方法4.1 安装问题4.2 运行问题4.3 性能问题 5. 实战…