Ingress-Nginx 安裝

行者·无疆發表於2024-07-01

Ingress-Nginx 安裝

配置一個 Web 伺服器或者負載均衡器比想象的難。大多數 Web 服務的配置檔案非常相似。有些應用需要一些奇怪的需求,但是在大多數的情況下,可以使用相同的邏輯以達到預期的效果。

Ingress 資源體現了這一思想,ingress 控制器處理了上述奇怪的需求。

Ingress 控制器是一個守護程序,作為一個 Pod 部署,它監視 Apiserver 的 ingresses 端點以獲取 ingress 資源的更新。

目錄
  • Ingress-Nginx 安裝
    • 下載部署檔案
    • 修改 Service Nodeport 檔案
    • 部署 Ingress
    • 測試 Ingress
      • 建立 Nginx
      • 建立 Ingress
      • 部署測試應用
      • 檢視 Ingress
      • 驗證 Ingress

下載部署檔案

# Ingress-nginx Deployment YAML 檔案
for file in configmap.yaml mandatory.yaml namespace.yaml rbac.yaml with-rbac.yaml; do wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/$file; done

# Service Nodeport YAML 檔案
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml

修改 Service Nodeport 檔案

...
ports:
    - name: http
      port: 80
      targetPort: 80
      # 自定義 NodPort
      # 確保重啟 SVC 後,Port 不變
      nodePort: 30080
      protocol: TCP
    - name: https
      port: 443
      targetPort: 443
      nodePort: 30443
      protocol: TCP
...

部署 Ingress

kubectl apply ./

# 檢視 Ingress-Deploy、Service
# 注意:namespace 為 ingress-nginx
kubectl get deploy -n ingress-nginx
kubectl get svc -n ingress-nginx

測試 Ingress

建立 Nginx

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ingress-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: ingress-nginx
      release: test
  template:
    metadata:
      labels:
        app: ingress-nginx
        release: test
    spec:
      containers:
      - name: ingress-nginx
        image: nginx
        resources:
          limits:
            memory: "128Mi"
            cpu: "50m"
        ports:
        - containerPort: 80
          name: nginx-port

---
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx-svc
spec:
  selector:
    app: ingress-nginx
    release: test
  ports:
  - port: 80
    targetPort: nginx-port

建立 Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    # host: 確保域名與 Node 的 IP 對應
    # 1.1.1.1 test.test.com
    - host: test.test.com
      http:
        paths:
          - path:
            backend:
              serviceName: ingress-nginx-svc
              servicePort: 80

部署測試應用

kubectl apply -f ./

檢視 Ingress

kubectl get ingress
# 檢視詳細資訊
kubectl describe ingress nginx-ingress

驗證 Ingress

透過外網訪問域名加埠,此處為 test.test.com:30080。

  1. 一個nginx-ingress部署示例
  2. Ingress-nginx Installation Guide

相關文章