最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

k8s對外服務之ingress使用詳解

 更新時間:2025年07月10日 09:22:33   作者:新是一切的根源  
Ingress作為K8s的7層負載均衡器,通過單一入口管理多個服務,使用IngressController(如Nginx)和資源,支持按域名/路徑路由,解決端口沖突與配置復雜問題

1. ingress概述

k8s 對外暴露服務(service)主要有兩種方式:NotePort, LoadBalance, 此外externalIPs也可以使各類service對外提供服務,但是當集群服務很多的時候,NodePort方式最大的缺點是會占用很多集群機器的端口;LB方式最大的缺點則是每個service一個LB又有點浪費和麻煩,并且需要k8s之外的支持; 而ingress則只需要一個NodePort或者一個LB就可以滿足所有service對外服務的需求。

工作機制大致可以用下圖表示:

實際上,ingress相當于一個7層的負載均衡器,是k8s對反向代理的一個抽象。大概的工作原理也確實類似于Nginx,可以理解成在 Ingress 里建立一個個映射規(guī)則 , ingress Controller 通過監(jiān)聽 Ingress這個api對象里的配置規(guī)則并轉化成 Nginx 的配置(kubernetes聲明式API和控制循環(huán)) , 然后對外部提供服務。

ingress包括:ingress controller和ingress resources

  • ingress controller:核心是一個deployment,實現(xiàn)方式有很多,比如nginx, Contour, Haproxy, trafik, Istio,需要編寫的yaml有:Deployment, Service, ConfigMap, ServiceAccount(Auth),其中service的類型可以是NodePort或者LoadBalancer。
  • ingress resources:這個就是一個類型為Ingress的k8s api對象了,這部分則是面向開發(fā)人員。

Kubernetes給出的方案就是Ingress,Ingress包含了兩大主件Ingress Controller和Ingress。

Ingress解決的是新的服務加入后,域名和服務的對應問題,基本上是一個ingress的對象,通過yaml進行創(chuàng)建和更新進行加載。

Ingress Controller是將Ingress這種變化生成一段Nginx的配置,然后將這個配置通過Kubernetes API寫到Nginx的Pod中,然后reload.(注意:寫入 nginx.conf 的不是service的地址,而是service backend 的 pod 的地址,避免在 service 在增加一層負載均衡轉發(fā))

從上圖中可以很清晰的看到,實際上請求進來還是被負載均衡器攔截,比如 nginx,然后 Ingress Controller 通過跟 Ingress 交互得知某個域名對應哪個 service,再通過跟 kubernetes API 交互得知 service 地址等信息;綜合以后生成配置文件實時寫入負載均衡器,然后負載均衡器 reload 該規(guī)則便可實現(xiàn)服務發(fā)現(xiàn),即動態(tài)映射

了解了以上內容以后,這也就很好的說明了我為什么喜歡把負載均衡器部署為 Daemon Set;因為無論如何請求首先是被負載均衡器攔截的,所以在每個 node 上都部署一下,同時 hostport 方式監(jiān)聽 80 端口;那么就解決了其他方式部署不確定 負載均衡器在哪的問題,同時訪問每個 node 的 80 都能正確解析請求;如果前端再 放個 nginx 就又實現(xiàn)了一層負載均衡。

Ingress Controller 會根據(jù)你定義的 Ingress 對象,提供對應的代理能力。業(yè)界常用的各種反向代理項目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已經(jīng)為Kubernetes 專門維護了對應的 Ingress Controller。

2. ingress-nginx 部署

ingress調度的是后端的service,而不是pod

ingress controller 是與k8s集群做交互的,感知etcd的變化

首先拉取 ingress-controller鏡像至harbor倉庫

部署nginx-ingress-controller

拿到y(tǒng)aml文件 應用ingress controller定義文件

[kubeadm@server1 ingress]$ ls
mandatory.yaml
[kubeadm@server1 ingress]$ 

編輯此文件,把鏡像的位置換成本地倉庫中鏡像的位置

應用ingress controller定義文件


應用ingress-service定義文件

查看信息


3. 創(chuàng)建ingress服務

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-demo
spec:
  backend:
    serviceName: nginx-svc
    servicePort: 80
創(chuàng)建 service.yaml文件
kind: Service
apiVersion: v1
metadata:
  name: nginx-svc
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  selector:
    app: nginx
[kubeadm@server1 ingress]$ \vi ingress.yaml
[kubeadm@server1 ingress]$ vim ingress.yaml 
[kubeadm@server1 ingress]$ vim service.yaml
[kubeadm@server1 ingress]$ kubectl apply -f service.yaml 
service/myservice created
[kubeadm@server1 ingress]$ kubectl apply -f ingress.yaml 
ingress.networking.k8s.io/ingress-demo created
[kubeadm@server1 ingress]$ 

ingress-nginx調度nginx-svc這個服務

[kubeadm@server1 ingress]$ kubectl -n ingress-nginx get svc
NAME            TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.99.32.59   <none>        80:30016/TCP,443:31941/TCP   31m
[kubeadm@server1 ingress]$ 

外部訪問

實現(xiàn)myservice服務中的負載均衡,因為ingress-nginx也是通過nodeport模式的端口暴露,實現(xiàn)外部訪問

4. 通過域名的形式來訪問后端

5. 通過不同的域名定義到不同的后端

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-myapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: reg.westos.org/k8s/myapp:v2
        ports:
        - containerPort: 80


---
kind: Service
apiVersion: v1
metadata:
  name: myservice
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  selector:
    app: myapp
  type: ClusterIP

---

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-example
spec:
  rules:
  - host: www2.westos.org
    http:
      paths:
      - path: /
        backend:
          serviceName: myservice
          servicePort: 80


[kubeadm@server1 ingress]$ kubectl get ingress
NAME              CLASS    HOSTS             ADDRESS       PORTS   AGE
ingress-demo      <none>   www1.westos.org   10.99.32.59   80      36m
ingress-example   <none>   www2.westos.org   10.99.32.59   80      3m22s
[kubeadm@server1 ingress]$ 

訪問www2.westos.org時訪問到v2

訪問www1.westos.org時訪問到v1

訪問不同的域名,訪問到的后端service不同,負載到不同的pod后端

6. 訪問同一域名,不同的path時,調度到不同的后端

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-hello
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: www3.westos.org 
    http:
      paths:
      - path: /1 
        backend:
          serviceName: ingress-nginx
          servicePort: 80 
      paths:
      - path: /2
        backend:
          serviceName: myservice
          servicePort: 80


總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • k8s如何使用NFS作為StorageClass提供動態(tài)存儲

    k8s如何使用NFS作為StorageClass提供動態(tài)存儲

    本文主要介紹了k8s中的StorageClass,包括其定義、引入的原因、實現(xiàn)方式、定義方法以及回收策略對數(shù)據(jù)的影響等,首先,StorageClass是在K8s集群中創(chuàng)建用于動態(tài)PV的管理,可以鏈接至不同的后端存儲,對存儲的請求可以指向StorageClass
    2024-09-09
  • K8S中五種控制器的介紹以及使用

    K8S中五種控制器的介紹以及使用

    這篇文章主要給大家介紹了關于K8S中五種控制器及使用的相關資料,控制器 又稱之為工作負載,本文通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-12-12
  • K8s強制刪除Terminating資源方式

    K8s強制刪除Terminating資源方式

    文章總結:通過設置Pod等待時間為0、刪除Namespace導出Terminating.json、開啟調試模式、新開窗口執(zhí)行請求并修改相關文件名、端口和命名空間,實現(xiàn)了一個高效的腳本操作流程
    2026-01-01
  • K8S中Pod重啟策略及重啟可能原因詳細講解

    K8S中Pod重啟策略及重啟可能原因詳細講解

    在k8s集群中當某個pod資源需要重啟時,我們只會對其進行刪除,由其pod控制器進行重新構建,下面這篇文章主要給大家介紹了關于K8S中Pod重啟策略及重啟可能原因的相關資料,需要的朋友可以參考下
    2023-05-05
  • k8s整合istio配置gateway入口、配置集群內部服務調用管理(最新推薦)

    k8s整合istio配置gateway入口、配置集群內部服務調用管理(最新推薦)

    這篇文章主要介紹了k8s整合istio配置gateway入口、配置集群內部服務調用管理,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • 在AWS-EC2中安裝Minikube集群的詳細過程

    在AWS-EC2中安裝Minikube集群的詳細過程

    這篇文章主要介紹了在AWS-EC2中安裝Minikube集群,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Hadoop 2.x與3.x 22點比較,Hadoop 3.x比2.x的改進

    Hadoop 2.x與3.x 22點比較,Hadoop 3.x比2.x的改進

    本文介紹了Hadoop3版本中添加的新功能,Hadoop 2和Hadoop 3的區(qū)別,在這篇文章中,我們將討論Hadoop 2.x與Hadoop 3.x之間的比較。感興趣的朋友跟隨小編一起看一下
    2018-09-09
  • k8s編排之DaemonSet知識點詳解

    k8s編排之DaemonSet知識點詳解

    這篇文章主要為大家介紹了k8s編排之DaemonSet知識點詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • k8s證書過期時間掃描方式

    k8s證書過期時間掃描方式

    該文章介紹了多種檢查Kubernetes證書過期時間的方法,包括使用openssl命令、kubeadm工具、Shell腳本、Kubernetes API等,文章還提到了一些第三方工具,如cert-manager、kube-cert-manager和PrometheusSSLExporter,以及關鍵證書的位置
    2025-10-10
  • kubeadm部署k8s集群全過程

    kubeadm部署k8s集群全過程

    本文詳細描述了如何在VMware虛擬機上基于CentOS8操作系統(tǒng)搭建Kubernetes集群,包括環(huán)境準備、Docker安裝、Kubernetes組件安裝、網(wǎng)絡插件配置以及KuboardUI的安裝和訪問
    2025-01-01

最新評論

裕民县| 都江堰市| 济阳县| 收藏| 毕节市| 南丰县| 江口县| 金坛市| 枝江市| 鹰潭市| 阳新县| 弥勒县| 屏东市| 宁陵县| 万全县| 平定县| 崇明县| 上虞市| 张家港市| 永川市| 琼结县| 永昌县| 武威市| 饶河县| 怀柔区| 镇康县| 永州市| 洪江市| 黄冈市| 大悟县| 舞阳县| 新闻| 彩票| 屯昌县| 九龙坡区| 自治县| 南通市| 兰州市| 泰顺县| 蒙自县| 武安市|