🔥
Caster 開發日誌
  • Java
    • JVM Performance Tool
      • Java Debug Wire Protocol (JDWP) 的詳細介紹
      • JConsole 詳細介紹
    • Spring Boot
      • Spring Security
      • Spring Boot Admin
      • Spring Event
      • Spring AOP
      • Spring Boot JUnit 5
      • Apache Dubbo
    • Reflect 應用
    • ELK + F 建構
    • Socket.IO
    • OCR - 光學字元辨識
    • 讀取JAR resource文件
    • LocalTime & MySQL時間精度
    • Gradle multi module
    • MyBatis-Plus
    • Java Date operation
    • Java IP to Long
    • Apache Commons lang3 應用
      • Function 應用
    • Cloud Platform
      • Amazon S3
        • SDK V1
          • Bucket
        • SDK V2
          • Bucket
      • Google Cloud Platform
      • Azure Cloud
        • Storage
      • OVHcloud
        • Config
    • SSL/TLS工具
    • Util 工具
      • Jackson Json工具
      • Charles應用
      • JMeter – Performing Distributed Load Testing with Docker
    • Redis
      • Stream
      • Redisson 分布式鎖機制
      • Create Redis Cluster Using Docker
      • List Operations
    • Java 8
      • method & constructor Reference
      • CompletableFuture
      • FunctionInterface
      • Stream 應用
      • 繁簡轉換 - 簡易調整
    • MySQL
      • 建立測試用 流水號Table
      • SQL 效能調校 - Explain
      • SQL 效能調校 - Partition
      • 排程 - Event
    • Apache ShardingSphere
  • Kubernetes
    • 初入江湖(K8S)
    • 零中斷服務滾動更新
    • Kubernetes DNS
    • Ingress & Ingress Controller 教學
    • Ingress TLS Easy setup
  • 指令集
  • Telegram
  • SourceTree
    • 踩坑紀錄(ㄧ) - Git Flow
    • 踩坑紀錄(二) - 修改檔名
  • 專案統計
    • Robot
    • Recharge
  • GitHub
    • Actions
  • GitLab
    • 介紹 GitLab
    • 使用 Docker 自架 GitLab
    • 簡介 GitLab CI/CD
      • GitLab Runner 詳細介紹與設定方式
Powered by GitBook
On this page
  • 目錄
  • 1. Ingress & Ingress Controller 概述
  • 2. 安裝 Nginx Ingress Controller
  • 3. 創建 Ingress 資源
  • 4. 調整本機 Hosts 檔案
  • 5. 測試 Ingress 路由
  • 6. 總結
  1. Kubernetes

Ingress & Ingress Controller 教學

使用 Nginx Ingress Controller

在 Kubernetes 中,Ingress 是一種 API 對象,允許 HTTP 和 HTTPS 的流量路由進入集群內的服務。Ingress Controller 是用來實現這些路由規則的控制器,它負責監控 Ingress 資源,並基於定義的路由規則來管理流量。本文將介紹如何安裝並配置 Nginx Ingress Controller 來處理 Kubernetes 中的流量。

目錄

  1. Ingress & Ingress Controller 概述

  2. 安裝 Nginx Ingress Controller

  3. 創建 Ingress 資源

  4. 調整本機 Hosts 檔案

  5. 測試 Ingress 路由

  6. 總結


1. Ingress & Ingress Controller 概述

Ingress

Ingress 是一個 Kubernetes 物件,用來定義如何將外部 HTTP 和 HTTPS 請求路由到集群內的服務。Ingress 使得 Kubernetes 中的服務能夠有一個統一的入口,並且可以根據不同的路由規則將請求分發到不同的服務。

Ingress 的基本結構如下:

  • apiVersion: networking.k8s.io/v1

  • kind: Ingress

  • metadata: 包含名稱、標籤等元數據

  • spec: 定義了如何處理流量的規則(路由規則)

Ingress Controller

Ingress Controller 是一個負責監控 Kubernetes 中 Ingress 物件的控制器。它會根據 Ingress 資源中定義的路由規則,將外部流量轉發到相應的服務。Ingress Controller 是 Kubernetes 集群中運行的 Pod,通常是基於 Nginx、Traefik 或 HAProxy 等開源反向代理實現的。


2. 安裝 Nginx Ingress Controller

在 Kubernetes 集群中安裝 Nginx Ingress Controller 是非常簡單的,Nginx 官方提供了 Helm Chart 和 YAML 文件來進行部署。

使用 Helm 安裝

1. 建立 nginx ingress controller CRDs

kubectl apply -f https://raw.githubusercontent.com/nginx/kubernetes-ingress/v4.0.0/deploy/crds.yaml

在 Kubernetes 中,CRDs(Custom Resource Definitions,自訂資源定義)是讓你擴展 Kubernetes API 的一種方式。它允許你定義自訂的資源類型,使得 Kubernetes 能夠理解並操作你自定義的資源。以下將解釋 CRDs 的概念,並且說明一些常見指令的用途。

3. 選定目錄存放 ingress controller 設定文件

4. 使用 Helm 指令拉取ingress controller 資源

helm pull oci://ghcr.io/nginx/charts/nginx-ingress --untar --version 2.0.0

執行完會發先你的資料夾底下會出現 nginx-ingress

5. 進入 nginx-ingress 資料夾,執行部署 ingress controller

helm install caster-nic .

# caster-nic 可自訂義-最終會與POD組建在一起
# . 指定nginx-ingress 資料夾位置

當然也可以使用YAML 建立 ingress controller ,這部分我就沒有成功過.... 所以就不補充了,後續如果我有成功,在跟各位分享實際做法與遇到什麼樣的問題

查看 k8s 集群內容

kubectl get all

確認 ingress controller 狀態為 running,這樣基本上你已經完成了一半


3. 創建 Ingress 資源

當 Nginx Ingress Controller 成功安裝並運行後,您可以創建一個 Ingress 資源來將流量路由到您的服務。以下是一個基本的 Ingress 配置範例。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
    name: caster-ingress
    namespace: default
spec:
    ingressClassName: nginx
    rules:
        -   host: example-caster.com  # 替換為你的域名
            http:
                paths:
                    -   path: /
                        pathType: Prefix
                        backend:
                            service:
                                # 你要提供服務的 k8s Service 名稱 & port
                                name: normal-project-service
                                port:
                                    number: 9000

其中有註解的部分,如果你是根據前面的文章一路看到這邊,normal-project-service 的部分,前面的文章有設定 nodePort 需要將他移除掉,稍後會在補充完整的YML

normal-projecy yml其餘設定接不調整, 僅調整 Service 設定部分

---
# ClusterIP Service (內部通信)
apiVersion: v1
kind: Service
metadata:
    name: normal-project-service
    namespace: default
spec:
    type: ClusterIP
    clusterIP: 10.96.100.1  # 指定固定的 Cluster IP
    selector:
        app.kubernetes.io/name: normal-project
    ports:
        - port: 9000         # 與服務端口一致
          targetPort: 8080

ClusterIP:主要是用來後續如果多服務的架構,可透過ClusterIP進行內部通信 NodePort:移除掉,因為對外部分,就交給 ingress & ingress controller 管理

建立 ingress 並且查看資源狀態

kubectl apply -f .\ingress.yml
kubectl get ingress

4. 調整本機 Hosts 檔案

主要是因為我們要使用自訂義域名,去訪問我們所串建的服務

hosts 的檔案位置,就根據自己使用的系統,上網查一下位置在哪裡,並且進行修改,調整前請先備份一份起來避免修改錯誤。

像我自己本機的內部IP就是 172.20.61.17 ,所以我就設定 example-caster.com 指向 172.20.61.17,這樣我透過自訂義域名訪問,我的主機就會幫我轉發到我的內部IP。


5. 測試 Ingress 路由


6. 總結

在本文中,我們介紹了 Kubernetes 中的 Ingress 和 Ingress Controller,並且使用 Nginx Ingress Controller 作為流量路由的控制器。我們學會了如何安裝 Nginx Ingress Controller、創建 Ingress 資源,並測試路由功能。通過這種方式,您可以將外部 HTTP(S) 流量路由到 Kubernetes 集群中的服務,從而提高服務的可擴展性與靈活性。

居然都已經走到這邊了,後續會再把TSL也把他補上,未完待續.........

PreviousKubernetes DNSNextIngress TLS Easy setup

Last updated 3 months ago

2. 首先安裝 Helm 前往官方 下載指令程式,並且完成系統環境變數設定

這不就上扣了嗎? 很急吼 GitHub:

github 網站
前往