nginx-ingress 配置跳坑指南
阿新 • • 發佈:2018-12-09
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
/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的配置。