使用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.pswp.cn/bicheng/77622.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77622.shtml
英文地址,請注明出處:http://en.pswp.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. 實戰…