k8s對外暴露服務:ingress controller介紹

2020-08-30 清風明月eagle

堅持原創,共同進步!請關注我,後續分享更精彩!!!

k8s集群內部服務對外暴露有幾種方式:nodeport、LoadBalancer、ingress。

nodeport通過宿主機埠來暴露不同service的訪問入口。當集群對外暴露service很多時,對外的埠開放也會急劇膨脹,而且是集群中每臺宿主機都暴露一樣多的埠,在可維護性和安全性都具有很大挑戰;

LoadBalance需要配合雲廠商的負載均衡服務一起使用,有一定費用成本;

Ingress通常對外暴露兩個埠(http和https)。通過rule的規則定義來映射不同流量和service的對應關係。可以看做是nodeport方式的優化方案。

本文將向大家分享,如何通過ingress對外暴露集群中的服務?希望對大家有所幫助和參考。

什麼是ingress

ingress是k8s中的一個對象,該對象實現了這樣一種抽象:它通過配置http和https的路由規則,暴露了外部請求到集群內部service的訪問方式。

internet | [ Ingress ] --|-----|-- [ Services ]

ingress只負責規則定義,規則的執行將委託給具體的ingress controller。可選擇的ingress controller有很多(可點擊查看),這裡只介紹常用的ingress NGINX controller

ingress controller非集群默認組件,需單獨安裝。

ingress 工作方式

ingress NGINX controller,會運行一個service和deployment對象。service以nodeport方式對外暴露http和https兩個埠,用以接收外網流量;deployment實時監聽集群中的ingress和service,當發現ingress rule變更或service調整後,做出相關響應,如覆蓋rule 規則,重載NGINX conf配置等。

ingress NGINX controller 安裝

點擊查看官方文檔。

這裡以Bare-metal(裸機)方式安裝。

下載以下文件(地址無法訪問,度娘域名ip,綁定本地主機host)

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.34.1/deploy/static/provider/baremetal/deploy.yaml

打開文件,找到image: us.gcr.io/k8s-artifacts-prod/ingress-nginx/controller:v0.34.1內容,替換為image: paynege/ingress-nginx-controller:v0.34.1

替換原因:ingress-nginx鏡像地址為Google私有倉庫,國內網絡限制,無法訪問。需要替換為其他網絡地址。這裡選擇docker hub中的一個可用版本。解決方案可參考

master節點執行ingress-NGINX安裝:

kubectl apply -f deploy.yaml

查看安裝狀態:

kubectl get pods -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --watch


上圖,ingress-nginx-controller running status表示啟動成功。

ingress安裝

新建ingress規則文件,ingress規則可點擊查看。

如上圖,ingress中定義了兩個規則。

  • dctl.ms.consumer.com域名/hello/world請求,將被轉發到後臺dctl-ms-consumer-svc服務處理;
  • dctl.ms.provider.com域名/hello請求,將被轉發到後臺dctl-ms-provider-svc服務處理。

啟動ingress

kubectl apply -f {替換ingress文件名稱}

驗證

查看ingress-nginx svc對外埠

kubectl get svc -n ingress-nginx


如上圖,對外暴露埠,http對應32461埠;https對應31626埠。

本地電腦綁定訪問dctl.ms.consumer.com/dctl.ms.provider.com域名對應的k8s集群宿主機ip地址,瀏覽器請求測試接口。


接口正常響應,ingress規則生效。

總結

本文介紹了k8s集群內部服務對外暴露的幾種方式:nodeport、LoadBalancer、ingress;這幾種方式的工作方式及優缺點;最後對ingress的ingress-NGINX安裝進行了演示。

由於個人能力所限,若有疏漏之處,請不吝指正。謝謝!

相關焦點

  • 容器雲平臺~kubernetes 服務暴露之Ingress
    這是容器雲平臺第四篇,接上一篇繼續,首先kubernetes服務暴露有如下幾種方式:NodePortLoadbalance大白話就是:把kubernetes集群生部署的服務暴露出來,讓集群外部的用戶或者服務能訪問到。
  • 使用 Golang 自定義 Kubernetes Ingress Controller
    Ingress 對象Kubernetes 內置就支持通過 Ingress 對象將外部的域名映射到集群內部服務,我們可以通過如下的 Ingress 對象來對外暴露服務:apiVersion: extensions/v1beta1kind: Ingressmetadata: name: whoamispec: tls: -
  • ASP.NET Core on K8s學習之旅(12)Ingress
    1關於IngressKubernetes對外暴露Service主要有三種方式:NodePort、LoadBalancer 以及 Ingress。前兩種我們在本系列的第四篇《你必須知道的Service》一文中已經加以介紹,這裡我們主要來看看Ingress是個什麼鬼。
  • traefik2作為Ingress在k8s上安裝使用
    傳統上,邊緣路由器(或反向代理)需要一個配置文件,配置包含需要你事先配置好的所有可能路由,比如nginx就是這樣做的,而Traefik則從服務本身獲取它們,通過支持自動發現來做的,並且服務發現天然支持k8s,consul等。安裝traefik支持多種安裝方式,比如直接的二進位包安裝,docker安裝,rancher安裝,k8s安裝。
  • 「Kubernetes」第六章:service-ingress
    Ingress 就是定義規則來允許進入集群的請求被轉發到集群中對應服務上。通常所說的7層可以理解為它就是一個路由器,而反向代理就是有請求發送過來,它會幫忙轉到可以處理這個請求的服務上去。Ingress是配置模板,配置如何將請求轉發到服務的規則。Ingress-controller是控制器,對ingress定義的規則進行解析。
  • K8s Ingress Nginx 支持 Socket.io
    Ingress 及 Ingress Controller 簡介Ingress:是k8s 資源對象,用於對外暴露服務,該資源對象定義了不同主機名(域名)及 URL 和對應後端 Service(k8s Service)的綁定,根據不同的路徑路由 http 和 https 流量。
  • Kubernetes服務介紹
    前言上文介紹了Kubernetes副本機制,正是因為副本機制你的部署能自動保待運行,並且保持健康,無須任何手動幹預;本文繼續介紹kubernetes的另一個強大的功能服務,在客戶端和pod之間提供一個服務層,提供了單一的接入點,更加方便客戶端使用pod。
  • 《蹲坑學kubernetes》之17-12:Ingress
    要理解ingress,需要區分兩個概念,ingress和ingress-controller:1、ingress對象:指的是k8s中的一個api對象,一般用yaml配置。作用是定義請求如何轉發到service的規則,可以理解為配置模板。
  • Kubernetes用Helm安裝Ingress並踩一下使用的坑
    除了Ingress,還有NodePort、LoadBalance等方式,Ingress暴露給外界的方式還是很常用的。2 安裝Ingress我們通過helm來安裝,會方便一些,先更新helm的倉庫。如:us.gcr.io/k8s-artifacts-prod/ingress-nginx/controller:v0.34.1k8s.gcr.io/defaultbackend-amd64:1.5jettech/kube-webhook-certgen:v1.0.0quay.io/kubernetes-ingress-controller/nginx-ingress-controller
  • kubernetes中強大的代理ingress
    ↑ 點擊上方「喬邊故事」關注我們我們前面介紹過用Service配置Ingress資源的必要條件是你的kubernetes集群中有Ingress controller。定義一個簡單的Ingresss:[root@master ingress]# cat ingress-simple-daemo.yamlapiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata: name: ingress-simple-daemo annotations: nginx.ingress.kubernetes.io
  • Kubernetes服務詳解
    副本機制,正是因為副本機制你的部署能自動保待運行,並且保持健康,無須任何手動幹預;本文繼續介紹kubernetes的另一個強大的功能服務,在客戶端和pod之間提供一個服務層,提供了單一的接入點,更加方便客戶端使用pod。
  • kubernetes 採用 Ingress 發布服務
    但是這些方式都存在一些問題,幾乎都是通過節點埠的形式向外暴露服務的,了解 Service 的人應該知道,通過 Service 向外暴露埠,實際是在集群中的所有節點上監聽同一個埠,如果 Service 非常多,那每個節點上開啟的埠就會變得很多,這樣維護起來很複雜,而且也非常不安全。
  • 適合ingress-nginx接入外部負載均衡的部署
    先決條件通用部署命令 部署kubectl apply -f mandatory.yaml kubectl get pod -n ingress-nginxNAME READY STATUS RESTARTS AGEnginx-ingress-controller-5bb8fb4bb6
  • Ingress-nginx自定義配置文件
    k8s集群默認安裝的ingress-nginx直接投入測試或生產使用,其不合適的配置參數可能會導致一些訪問報錯例如:「413 Request Entity Too Large」「503 Service Unavailable」此時我們就需要調整ingress-nginx的配置參數來解決問題,有以下三種方式:ConfigMap使用ConfigMap設置Nginx的
  • ansible部署k8s
    目錄1、安裝ansible2、安裝k8sVersion: 3 (0x2) Serial Number: 51:5c:66:8b:40:24:d7:bb:ea:94:e7:5a:33:fe:44:a2:e2:18:51:b3 Signature Algorithm: sha256WithRSAEncryption Issuer: C=CN, ST=ShangHai, L=ShangHai, O=k8s
  • 對Kurbernetes中服務暴露方法的一些理解和說明
    對外提供服務-NodePort方式如果需要對外提供服務,實際上有NodePort,LoadBalancer和Ingress多種方式。下面分別來對這幾種方式做下說明。這種方式主要是利用其他第三方的LB暴露服務的,阿里雲或者亞馬遜的LB等等。
  • 記一次Gitlab-CI集成K8S實錄
    10.96.2.56 harbornode03 <none> <none>[root@wenqy ~]#[root@wenqy ~]# curl 10.96.2.56:18081/healthok[root@wenqy ~]#配置項目K8S Service類型為ClusterIP,通過集群的內部 IP 暴露服務
  • K8s使用metric-server讓pod自動擴縮容
    Metric API 暴露給外部訪問;自定義指標使用需要藉助 Prometheus 實現。metric-server 架構監控架構分兩部分內容:核心監控(圖白色部分)和自定義監控(圖藍色部分)1、 核心監控實現通過 kubelet 收集資源估算+使用估算metric-server 負責數據收集,不負責數據存儲metric-server 對外暴露
  • 記一次內部培訓:基於k8s的Ingress快速部署hexo博客
    簡介: 很多人說19年是原生雲的元年,之前沒感覺,這次在雲棲大會看到大家對原生雲的熱情,相信確實在進入原生雲推廣爆發期,就像15年的大數據技術的基礎hadoop一樣,k8s作為CNCF基金會的第一個暖化出來的項目,是不可撼動的基礎,因此為了讓大家快速熟悉k8s的基本操作,通過記錄hexo在k8s的部署來讓大家對k8s有個初步的影響