1. 程式人生 > >nginx-ingress 配置跳坑指南

nginx-ingress 配置跳坑指南

Ingress是Kubernetes叢集對外暴露服務的一種推薦方式,Ingress其實是封裝了nginx(也可以是traefic),背後還是nginx在發揮作用,Ingress的作用是不斷檢測服務的endpoint的變化,然後將變化更新到nginx的配置中。

簡單配置

Ingress有一個yaml配置檔案,Ingress根據這個配置檔案生成nginx的配置檔案,格式像下面這樣(test.yaml):

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: example.com
http: paths: - path: /service/ backend: serviceName: app1 servicePort: 8080

執行kubectl create -f test.yaml,通過example.com/app1/就可以訪問到app1的/service/目錄,這裡需要注意,app1中需要定義/service/路由,否則會出現錯誤,以上的配置檔案最終的nginx規則是:

example.com/service/ –> app1:8080/service/

如果app1中沒有定義service

這個路由,那麼需要做一個rewrite。例如,app1中定義了/v1/,想通過/service/訪問v1,這在nginx很容易做到,在Ingress中需要通過rewrite實現:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite /service/(.*) /v1/$1 break;
spec:
  rules:
  - host: example.com
http: paths: - path: /v1/ backend: serviceName: app1 servicePort: 8080

高階配置

配置HTTPS

首先建立一個secret資源,來儲存祕鑰和證書。如果你的證書是.pem的,也是一樣的,將下面的your_cert.crt改為your_cert.pem即可。

kubectl create secret tls tls_secret_name --key your_key.key --cert your_cert.crt

然後在Ingress的配置檔案中新增配置使用這個secret,然後更新配置kubectl replace -f ingress.yaml,即可。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite /service/(.*) /v1/$1 break;
spec:
  tls:
    - hosts:
      - example.com
      secretName: tls_secret_name
  rules:
  - host: example.com
    http:
      paths:
      - path: /v1/
        backend:
          serviceName: app1
          servicePort: 8080

總結

本文主要介紹了nginx版本的Ingress的配置。