溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nginx Ingress怎么部署

發布時間:2021-11-30 11:55:57 來源:億速云 閱讀:291 作者:iii 欄目:云計算
# Nginx Ingress怎么部署

## 前言

在現代云原生架構中,Ingress作為Kubernetes集群的流量入口網關,承擔著路由分發、負載均衡和TLS終止等重要功能。Nginx Ingress Controller作為最流行的Ingress實現方案之一,憑借其高性能、易擴展和豐富的功能特性,成為眾多企業的首選方案。本文將全面介紹Nginx Ingress的部署方法,涵蓋從基礎部署到高級配置的全流程。

## 一、部署前準備

### 1.1 環境要求

- Kubernetes集群(版本1.16+)
- kubectl命令行工具
- Helm(推薦3.0+版本)
- 集群管理員權限

### 1.2 網絡規劃建議

| 資源類型       | 建議配置                | 說明                     |
|----------------|-------------------------|--------------------------|
| NodePort范圍   | 30000-32767            | 確保端口未被占用         |
| 外部IP         | 預留2個以上靜態IP       | 用于LoadBalancer類型服務 |
| DNS域名        | 提前準備通配符域名      | 如*.example.com          |

### 1.3 命名空間創建

建議為Ingress Controller創建獨立命名空間:

```bash
kubectl create namespace ingress-nginx

二、基礎部署方式

2.1 使用Manifest部署(推薦生產環境)

官方提供的標準部署方式:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml

部署完成后驗證:

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

2.2 使用Helm部署(適合定制化需求)

添加Helm倉庫:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

基礎安裝命令:

helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.replicaCount=2

2.3 各云平臺特殊配置

AWS部署示例:

helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.service.type=LoadBalancer \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-type"="nlb"

Azure部署示例:

helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-internal"="true"

三、核心配置詳解

3.1 ConfigMap配置

關鍵配置參數示例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
data:
  # 連接超時時間
  proxy-connect-timeout: "30"
  # 請求體大小限制
  proxy-body-size: "20m"
  # 啟用gzip壓縮
  gzip: "on"
  # 自定義日志格式
  log-format-upstream: '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'

3.2 自定義Annotations

常用Ingress注解示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    # 啟用CORS
    nginx.ingress.kubernetes.io/enable-cors: "true"
    # 重寫路徑
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    # 認證配置
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    # 限速配置
    nginx.ingress.kubernetes.io/limit-rpm: "100"
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /api(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 80

四、高級部署方案

4.1 多實例部署模式

場景1:按命名空間隔離

helm install ingress-nginx-dev ingress-nginx/ingress-nginx \
  --namespace ingress-nginx-dev \
  --set controller.scope.enabled=true \
  --set controller.scope.namespace="dev-ns"

場景2:按IngressClass區分

# 控制器啟動參數添加
- --controller-class=k8s.io/internal-ingress-nginx
- --ingress-class=internal

4.2 金絲雀發布配置

通過Canary Annotation實現流量切分:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: canary-demo
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "30"
spec:
  rules:
  - host: demo.example.com
    http:
      paths:
      - backend:
          service:
            name: canary-service
            port:
              number: 80

4.3 自定義模板

創建自定義模板ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-template
  namespace: ingress-nginx
data:
  proxy-template.conf: |
    # 自定義proxy配置
    proxy_set_header My-Custom-Header "value";
    proxy_connect_timeout {{ .cfg.ProxyConnectTimeout }};

Helm中引用模板:

--set controller.extraVolumeMounts[0].name=nginx-template \
--set controller.extraVolumeMounts[0].mountPath=/etc/nginx/template \
--set controller.extraVolumes[0].name=nginx-template \
--set controller.extraVolumes[0].configMap.name=nginx-template

五、運維與監控

5.1 健康檢查配置

livenessProbe:
  httpGet:
    path: /healthz
    port: 10254
    scheme: HTTP
  initialDelaySeconds: 10
  periodSeconds: 10
  timeoutSeconds: 5
  successThreshold: 1
  failureThreshold: 3

5.2 監控指標暴露

Prometheus監控配置示例:

--set controller.metrics.enabled=true \
--set controller.metrics.serviceMonitor.enabled=true \
--set controller.metrics.serviceMonitor.additionalLabels.release="prometheus"

5.3 日志收集建議

推薦配置:

controller:
  logFormat: json
  extraArgs:
    access-log-path: /var/log/nginx/access.log
    error-log-path: /var/log/nginx/error.log
  extraVolumeMounts:
    - name: varlog
      mountPath: /var/log/nginx

六、常見問題排查

6.1 診斷工具

獲取詳細配置信息:

kubectl exec -n ingress-nginx <pod-name> -- nginx -T

檢查事件日志:

kubectl describe ingress <ingress-name>
kubectl logs -n ingress-nginx <pod-name>

6.2 典型問題處理

問題1:503 Service Temporarily Unavailable

可能原因: - 后端服務未就緒 - Endpoints選擇器不匹配

檢查命令:

kubectl get endpoints <service-name>

問題2:413 Request Entity Too Large

解決方案:

annotations:
  nginx.ingress.kubernetes.io/proxy-body-size: "50m"

七、安全加固建議

7.1 網絡策略

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: ingress-nginx-policy
  namespace: ingress-nginx
spec:
  podSelector:
    matchLabels:
      app.kubernetes.io/name: ingress-nginx
  ingress:
  - ports:
    - protocol: TCP
      port: 80
    - protocol: TCP
      port: 443
  egress:
  - to:
    - namespaceSelector: {}
    ports:
    - protocol: TCP
      port: 80
    - protocol: TCP
      port: 443

7.2 TLS最佳實踐

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

結語

本文詳細介紹了Nginx Ingress Controller的多種部署方式和配置技巧。在實際生產環境中,建議根據具體業務需求選擇合適的部署方案,并持續關注以下方面:

  1. 定期升級Controller版本(關注GitHub Releases
  2. 監控關鍵指標:QPS、延遲、錯誤率等
  3. 建立完善的日志收集和分析體系
  4. 制定災備和回滾方案

通過合理配置和持續優化,Nginx Ingress能夠為您的Kubernetes集群提供穩定高效的流量管理服務。 “`

這篇文章包含了約4050字,采用Markdown格式編寫,涵蓋了Nginx Ingress部署的完整流程,包括: - 環境準備和前置條件 - 基礎部署方法(Manifest/Helm) - 核心配置詳解 - 高級部署方案 - 運維監控指南 - 常見問題排查 - 安全加固建議

文章結構清晰,使用了代碼塊、表格等Markdown元素增強可讀性,并提供了實際可操作的命令和配置示例。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女