k8s核心對象Ingress

什么是Kubernetes Ingress?
Ingress是K8s中的一個API對象,用于管理和配置外部對集群內(nèi)服務(wù)的訪問。它允許我們定義HTTP和HTTPS路由規(guī)則,將請求從集群外部的負載均衡器引導(dǎo)到相應(yīng)的服務(wù)。Ingress的靈活性使得我們能夠?qū)崿F(xiàn)高級的應(yīng)用程序路由、SSL終端和負載均衡等功能。

通過Ingress,我們可以將集群內(nèi)的多個服務(wù)暴露到外部,并根據(jù)需要進行定制化的路由設(shè)置。這為應(yīng)用的擴展和靈活部署提供了便利。

Ingress的基本結(jié)構(gòu)
Ingress由以下幾個主要組件構(gòu)成:

規(guī)則(Rules): 每個Ingress對象可以包含多個規(guī)則,每個規(guī)則定義了一組路徑匹配規(guī)則和與之關(guān)聯(lián)的后端服務(wù)。
后端服務(wù)(Backend Services): 規(guī)則中指定的后端服務(wù)是Ingress路由請求到達時的目標(biāo)服務(wù)。這可以是集群中的Service、Pod或外部服務(wù)。
路徑(Paths): 路徑定義了應(yīng)該如何將請求路由到后端服務(wù)??梢允褂猛ㄅ浞驼齽t表達式進行路徑匹配。
TLS(Transport Layer Security): Ingress還支持TLS,用于啟用HTTPS。TLS配置包括證書和密鑰,確保數(shù)據(jù)在傳輸過程中的安全性。
下面是一個簡單的Ingress對象的例子:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: mydomain.com
    http:
      paths:
      - path: /app
        pathType: Prefix
        backend:
          service:
            name: my-app-service
            port:
              number: 80
  tls:
  - hosts:
    - mydomain.com
    secretName: my-tls-secret

在這個例子中,我們定義了一個Ingress對象,它將mydomain.com/app的請求路由到名為my-app-service的Service,并啟用了HTTPS。

Ingress的使用示例
為了更好地理解Ingress的使用,讓我們通過一個具體的示例來演示。

假設(shè)我們有一個Web應(yīng)用,包括前端(frontend)和后端(backend)服務(wù)。現(xiàn)在,我們希望通過Ingress將這兩個服務(wù)暴露到外部,并在路徑上進行定制化的路由。

首先,我們創(chuàng)建前端和后端的Deployment和Service:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
      - name: web-server
        image: my-frontend-image:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: frontend-service
spec:
  selector:
    app: frontend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
yamlapiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
      - name: api-server
        image: my-backend-image:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: backend-service
spec:
  selector:
    app: backend
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

接下來,我們定義Ingress對象:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: mydomain.com
    http:
      paths:
      - path: /frontend
        pathType: Prefix
        backend:
          service:
            name: frontend-service
            port:
              number: 80
      - path: /backend
        pathType: Prefix
        backend:
          service:
            name: backend-service
            port:
              number: 8080
  tls:
  - hosts:
    - mydomain.com
    secretName: my-tls-secret

在這個示例中,我們定義了一個Ingress對象,它將mydomain.com/frontend的請求路由到前端服務(wù),將mydomain.com/backend的請求路由到后端服務(wù)。此外,我們還啟用了HTTPS,并指定了TLS證書的Secret。

動態(tài)更新Ingress規(guī)則
Ingress的一個強大之處在于它支持動態(tài)更新。當(dāng)我們需要調(diào)整路由規(guī)則時,可以直接修改Ingress對象,而不需要重啟應(yīng)用或重新創(chuàng)建服務(wù)。

讓我們通過一個動態(tài)更新的例子來演示:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: mydomain.com
    http:
      paths:
      - path: /frontend
        pathType: Prefix
        backend:
          service:
            name: frontend-service
            port:
              number: 80
  tls:
  - hosts:
    - mydomain.com
    secretName: my-tls-secret

在這個例子中,我們僅保留了前端服務(wù)的路由規(guī)則。然后,通過應(yīng)用這個更新后的Ingress對象,K8s將自動更新負載均衡器的配置,使得只有mydomain.com/frontend的請求能夠到達前端服務(wù)。

Ingress作為連接集群內(nèi)服務(wù)和外部請求的橋梁,提供了靈活的路由和負載均衡功能。了解Ingress的基本結(jié)構(gòu)、使用示例以及動態(tài)更新的能力,有助于開發(fā)者更好地利用K8s進行應(yīng)用程序的外部暴露和訪問控制。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容