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

k8s對(duì)外服務(wù)之ingress使用詳解

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

1. ingress概述

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

工作機(jī)制大致可以用下圖表示:

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

ingress包括:ingress controller和ingress resources

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

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

Ingress解決的是新的服務(wù)加入后,域名和服務(wù)的對(duì)應(yīng)問(wèn)題,基本上是一個(gè)ingress的對(duì)象,通過(guò)yaml進(jìn)行創(chuàng)建和更新進(jìn)行加載。

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

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

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

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

2. ingress-nginx 部署

ingress調(diào)度的是后端的service,而不是pod

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

首先拉取 ingress-controller鏡像至harbor倉(cāng)庫(kù)

部署nginx-ingress-controller

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

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

編輯此文件,把鏡像的位置換成本地倉(cāng)庫(kù)中鏡像的位置

應(yīng)用ingress controller定義文件


應(yīng)用ingress-service定義文件

查看信息


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

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調(diào)度nginx-svc這個(gè)服務(wù)

[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]$ 

外部訪問(wèn)

實(shí)現(xiàn)myservice服務(wù)中的負(fù)載均衡,因?yàn)閕ngress-nginx也是通過(guò)nodeport模式的端口暴露,實(shí)現(xiàn)外部訪問(wèn)

4. 通過(guò)域名的形式來(lái)訪問(wèn)后端

5. 通過(guò)不同的域名定義到不同的后端

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]$ 

訪問(wèn)www2.westos.org時(shí)訪問(wèn)到v2

訪問(wèn)www1.westos.org時(shí)訪問(wèn)到v1

訪問(wèn)不同的域名,訪問(wèn)到的后端service不同,負(fù)載到不同的pod后端

6. 訪問(wèn)同一域名,不同的path時(shí),調(diào)度到不同的后端

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


總結(jié)

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

相關(guān)文章

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

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

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

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

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

    K8s強(qiáng)制刪除Terminating資源方式

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

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

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

    k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理(最新推薦)

    這篇文章主要介紹了k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 在AWS-EC2中安裝Minikube集群的詳細(xì)過(guò)程

    在AWS-EC2中安裝Minikube集群的詳細(xì)過(guò)程

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

    Hadoop 2.x與3.x 22點(diǎn)比較,Hadoop 3.x比2.x的改進(jìn)

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

    k8s編排之DaemonSet知識(shí)點(diǎn)詳解

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

    k8s證書過(guò)期時(shí)間掃描方式

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

    kubeadm部署k8s集群全過(guò)程

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

最新評(píng)論

泰宁县| 蒙阴县| 永川市| 山西省| 吉首市| 安泽县| 包头市| 瑞金市| 正定县| 鄂托克旗| 扬中市| 庆城县| 金华市| 佛冈县| 华亭县| 兴义市| 扶绥县| 茶陵县| 桦川县| 三门县| 新竹市| 大姚县| 枣庄市| 武清区| 台中县| 和林格尔县| 洱源县| 昌乐县| 阿克苏市| 镇宁| 平舆县| 鄂伦春自治旗| 炉霍县| 丰顺县| 龙岩市| 华亭县| 崇阳县| 关岭| 蓬溪县| 璧山县| 宕昌县|