1. 程式人生 > >kubernetes-核心資源之Ingress

kubernetes-核心資源之Ingress

1、Ingress

在Kubernetes中,服務和Pod的IP地址僅可以在叢集網路內部使用,對於叢集外的應用是不可見的。為了使外部的應用能夠訪問叢集內的服務,在Kubernetes中可以通過NodePort和LoadBalancer這兩種型別的服務,或者使用Ingress。

插曲--------------------------------------------------------------------start----------------------------------------------------------------------------------------------------------------------------

  一、Kubernetes 服務暴露介紹

  從 kubernetes 1.2 版本開始,kubernetes提供了 Ingress 物件來實現對外暴露服務;到目前為止 kubernetes 總共有三種暴露服務的方式:

  • LoadBlancer Service
  • NodePort Service
  • Ingress

  1.1、LoadBlancer Service

  LoadBlancer Service 是 kubernetes 深度結合雲平臺的一個元件;當使用 LoadBlancer Service 暴露服務時,實際上是通過向底層雲平臺申請建立一個負載均衡器來向外暴露服務;目前 LoadBlancer Service 支援的雲平臺已經相對完善,比如國外的 GCE、DigitalOcean,國內的 阿里雲,私有云 Openstack 等

  等,由於 LoadBlancer Service 深度結合了雲平臺,所以只能在一些雲平臺上來使用

  1.2、NodePort Service

  NodePort Service 顧名思義,實質上就是通過在叢集的每個 node 上暴露一個埠,然後將這個埠對映到某個具體的 service 來實現的,雖然每個 node 的埠有很多(0~65535),但是由於安全性和易用性(服務多了就亂了,還有埠衝突問題)實際使用可能並不多

  1.3、Ingress

  Ingress 這個東西是 1.2 後才出現的,通過 Ingress 使用者可以實現使用 nginx 等開源的反向代理負載均衡器實現對外暴露服務

插曲---------------------------------------------------------------------------------------------end-----------------------------------------------------------------------------------------------

Ingress本質是通過http代理伺服器將外部的http請求轉發到叢集內部的後端服務。Kubernetes目前支援GCE和nginx控制器;另外,F5網路為Kubernetes提供了F5 Big-IP控制器。通過Ingress,外部應用訪問群集內容服務的過程如下所示。

Ingress控制器通常會使用負載均衡器來負責實現Ingress,儘管它也可以通過配置邊緣路由器或其它前端以HA方式處理流量。

2、Ingress配置檔案

下面是Ingress YAML配置檔案的示例:

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
  name: test-ingress 
  annotations: nginx.ingress.kubernetes.io/rewrite-target: / 
spec: 
  rules: 
  - http: 
    paths: 
    - path: /testpath 
      backend: 
        serviceName: test 
        servicePort: 80
  • 1-6行:Ingress YAML檔案中的1-6行與其它的Kubernetes配置檔案一樣,需要apiVersion, kind和metadata欄位。此示例定義了名稱為test-ingress的Ingress。
  • 7-9行:Ingress規格具有配置負載均衡器或代理伺服器所需的所有資訊。最重要的是,它包含與所有傳入請求相匹配的規則列表。目前,Ingress資源僅支援http規則。
  • 10-11行:每個http規則都包含以下資訊:一個主機(例如:foo.ba.com,在這個例子中為*),一個路徑列表(例如:/testpath),每個路徑都有一個相關的後端(test:80)。在負載均衡器將業務引導到後端之前,主機和路徑都必須匹配傳入請求的內容。
  • 12-14行:後端是服務:埠(test:80)組合。Ingress流量通常被直接傳送到與後端相匹配的端點。

3、Ingress型別

3.1 代理單一服務

Kubernetes可以使用LoadBalancer和NodePort型別的服務暴露服務,也可以通過一個Ingress來實現。下面是名稱為test-ingress的Ingress YAML檔案,它將對外代理名稱為testsvc的服務。

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
  name: single-ingress 
  annotations: nginx.ingress.kubernetes.io/rewrite-target: / 
spec: 
  rules: 
  - host: foo.bar.com 
    http: 
      paths: 
      - path: /foo 
        backend: 
          serviceName: s1 
          servicePort: 80

通過kubectl create -f建立上述的Ingress,在建立後可以通過kubectl get ing的命令獲取Ingress的列表資訊:

$ kubectl get ing 

NAME RULE BACKEND ADDRESS

single-ingress –s1:80 107.178.254.228

3.2 代理多個服務

如前所述,在kubernetes 中Pod的IP地址只能對群集內的其它的應用可見。因此,如果需要接受叢集外部的流量,並將其代理到叢集中後端服務。在此示例中,通過foo.bar.com(IP地址為:178.91.123.132)主機作為代理伺服器。當路徑為http://foo.bar.cm:80/foo時,將會訪問後端的s1服務;當路徑為http://foo.bar.cm:80/bar時,將會訪問後端的s2服務。

foo.bar.com -> 178.91.123.132 -> / foo s1:80 / bar s2:80

針對上述場景,Ingress的YAML配置檔案如下所示:

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
  name: mult-ingress 
  annotations: nginx.ingress.kubernetes.io/rewrite-target: / 
spec: 
  rules: 
  - host: foo.bar.com 
    http: 
      paths: 
      - path: /foo 
        backend: 
          serviceName: s1 
          servicePort: 80 
      - path: /bar 
        backend: 
          serviceName: s2 
          servicePort: 80

通過kubctl create -f命令建立上述的Ingress:

$ kubectl get ing 

NAME RULE BACKEND ADDRESS

mult-ingress – foo.bar.com /foo s1:80 /bar s2:80

預設後端:沒有規則的入口,就像前一節中所示的那樣,會將所有的流量傳送到一個預設的後端。通過指定一組規則和預設後端,可以使用相同的技術來告訴負載均衡器,可以在哪裡能夠找到網站的404頁。如果在Ingress中沒有與請求頭中主機相匹配的主機,並且/或者沒有與請求的URL相匹配的路徑,那麼路由將被路由到預設的後端。

參考資料

https://mritd.me/2016/12/06/try-traefik-on-kubernetes/#%E4%B8%80kubernetes-%E6%9C%8D%E5%8A%A1%E6%9A%B4%E9%9C%B2%E4%BB%8B%E7%BB%8D

作者簡介:
季向遠,北京神舟航天軟體技術有限公司產品經理。本文版權歸原作者所有。

相關推薦

kubernetes-核心資源Ingress

1、Ingress 在Kubernetes中,服務和Pod的IP地址僅可以在叢集網路內部使用,對於叢集外的應用是不可見的。為了使外部的應用能夠訪問叢集內的服務,在Kubernetes中可以通過NodePort和LoadBalancer這兩種型別的服務,或者使用Ingress。 插曲--------------

Kubernetes核心概念Replication Controller詳解

kubernetes docker 虛擬化 replication controll Replication Controller簡稱RC,它能夠保證Pod持續運行,並且在任何時候都有指定數量的Pod副本,在此基礎上提供一些高級特性,比如滾動升級和彈性伸縮? ? 它在k8s中的架構如圖:? ?

Kubernetes核心概念Service詳解

clusterip ips aml 開放 lan font led IT 架構 Service是k8s中非常重要的組成單元,作用是作為代理把在POD中容器內的服務發布出去,提供一套簡單的發現機制和服務代理,也就是運維常說的‘前端’概念,那麽它如何實現代理功能以及自動

Kubernetes核心概念Volume存儲數據卷詳解

gin creat 自己的 當前 ges 訪問路徑 服務器 tor type 在Docker中就有數據卷的概念,當容器刪除時,數據也一起會被刪除,想要持久化使用數據,需要把主機上的目錄掛載到Docker中去,在K8S中,數據卷是通過Pod實現持久化的,如果Pod刪除

核心資源Pod_Kubernetes中文社群

1、Pod概述 在Kubernetes叢集中,Pod是所有業務型別的基礎,它是一個或多個容器的組合。這些容器共享儲存、網路和名稱空間,以及如何執行的規範。在Pod中,所有容器都被同一安排和排程,並執行在共享的上下文中。對於具體應用而言,Pod是它們的邏輯主機,Pod包含業務相關的多個應用容器。

核心資源Service_Kubernetes中文社群

在Kubernetes中,Pods是有生命週期的。它們被建立、被終止,但不能被複活。在Kubernetes中通過ReplicationControllers動態的建立和刪除Pod。然後,每一個Pod都擁有自己的IP地址,但是這些IP地址隨著時間會發生變化。這會導致一個問題:如果在Kubern

核心資源Ingress_Kubernetes中文社群

1、Ingress 在Kubernetes中,服務和Pod的IP地址僅可以在叢集網路內部使用,對於叢集外的應用是不可見的。為了使外部的應用能夠訪問叢集內的服務,在Kubernetes中可以通過NodePort和LoadBalancer這兩種型別的服務,或者使用Ingress。Ingress本質

Kubernetes 核心原理

kubernetes 網路模型 kubernetes網路模型設計的一個基礎原則是:每個Pod都擁有一個獨立的IP地址,而且假定所有Pod都在一個可以直接連通的、扁平網路空間中。所以不管他們是否執行在同一個Node(宿主機)中,都要求他們可以直接通過對方IP進行

kubernetes 原始碼分析ingress(一)

kubernetes的服務對外暴露通常有三種方式分別為nodeport、loadbalancer和ingress。nodeport很容易理解就是在每個主機上面啟動一個服務埠暴露出去,這樣弊端是造成埠浪費;loadbalancer這種方式目前只能在gce的平臺跑的

kubernetesIngress部署

min root 好的 sts memory com 變化 分享 hang 1,如何訪問K8S中的服務: 1,Ingress介紹 Kubernetes 暴露服務的方式目前只有三種:LoadBlancer Service、NodePort Service、

kubernetes學習筆記十二:資源指標API及自定義指標API

第一章、前言 以前是用heapster來收集資源指標才能看,現在heapster要廢棄了從1.8以後引入了資源api指標監視 資源指標:metrics-server(核心指標) 自定義指標:prometheus,k8s-prometheus-adapter(將Prometheus採集的資料轉換為指

Kubernetes核心原理(一)API Server

1. API Server簡介 k8s API Server提供了k8s各類資源物件(pod,RC,Service等)的增刪改查及watch等HTTP Rest介面,是整個系統的資料匯流排和資料中心。 kubernetes API Server的功能: 提供了叢集管理的REST API介面(包括認

kubernetesingress安裝及遇到的rbac問題

話不多少,直接上建立步驟 一、default-backend apiVersion: extensions/v1beta1 kind: Deployment metadata: name: default-http-backend labels:

Kubernetes核心原理(二)Controller Manager

1. Controller Manager簡介Controller Manager作為叢集內部的管理控制中心,負責叢集內的Node、Pod副本、服務端點(Endpoint)、名稱空間(Namespace)、服務賬號(ServiceAccount)、資源定額(ResourceQ

【2】OMAP335X-核心BSP資源註冊那些事.

PC 系統 :ubuntu10.04 MPU平臺:OAMP3352 核心版本:3.2.0 宣告:我講解的範疇是從核心解壓以後經過彙編程式碼執行最後跳到第一個C程式碼這個點開始講解,一直講到檔案系統被正確的掛載起來,使用者可以正常登入!至於之前的解壓縮核心、彙編啟動程式碼我會以後另開文章講解。 目標:本文想闡

kubernetes物件Ingress

系列目錄 概述 向外網暴露叢集內服務,以使客戶端能夠訪問,有以下幾種方法,本文重點描述Ingress。 LoadBalancer LoadBalancer一般由雲服務供應商提供或者使用者自定義,執行在叢集之外。在建立service時為其配置LoadBalancer相關引數,當從外網訪問叢集內servcie

Kubernetes K8SIngress詳解與示例

  K8S之Ingress概述與說明,並詳解Ingress常用示例   主機配置規劃 伺服器名稱(hostname)系統版本配置內網IP外網IP(模擬) k8s-master CentOS7.7 2C/4G/20G 172.16.1.110 10.0.0.110 k8s-

Java核心技術基本數據類型

又能 art 資料 string 1.4 get bool 讀取 大數 這篇文章。我們討論一些java的最主要的東西。這些東西我們一般剛剛學java的時候就學過,可是不一定真正明確。正好,我在做一個讀取內存的值,涉及到bit位的值的讀取和寫。那就能夠討論一個

Android資源圖像資源(狀態圖像資源

one android資源 nco 文件夾 nts 淡出 else if fontsize bsp 在上一篇博文中。我主要解說了XML圖像資源中的圖層資源,在此圖像資源博文中我會給大家陸續解說XMl圖像資源的圖像狀態資源、圖像級別資源、淡入淡出資源、嵌入圖像資源、剪切圖

kubernetes Master部署Scheduler 以及 HA部署(5)

mit 節點 ext health 作用 fig heal color nod Kubernetes Scheduler作用是將Controller Manager將要新建的Pod按照特定的調度算法和調度策略綁定到集群中某個合適的Node上,並將綁定信息寫入到etcd中。