ingress
可以配置一個入口來提供k8s上service從外部來訪問的url、負載平衡流量、終止SSL和提供基于名稱的虛擬主機。
?
配置ingress的yaml:
要求域名解析無誤
要求service對應的pod正常
?
一、test1.domain.com ? -->? service1:8080
apiVersion: extensions/v1beta1 kind: Ingress metadata:name: test-ingressnamespace: test spec:rules:- host: test1.domain.comhttp:paths:- backend:serviceName: service1servicePort: 8080path: /
?
二、test1.domain.com ? --> ? /aaa ? --> ? service2:8080
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? --> ? /bbb ? --> ? service3:8080
apiVersion: extensions/v1beta1 kind: Ingress metadata:name: test-ingressnamespace: test spec:rules:- host: test1.domain.comhttp:paths:- backend:serviceName: service1servicePort: 8080path: /aaa- backend:serviceName: service2servicePort: 8080path: /bbb
?
三、test1.domain.com ? -->? service1:8080
test2.domain.com ? -->? service4:8080
apiVersion: extensions/v1beta1 kind: Ingress metadata:name: test-ingressnamespace: test spec:rules:- host: test1.domain.comhttp:paths:- backend:serviceName: service1servicePort: 8080- host: test2.domain.comhttp:paths:- backend:serviceName: service4servicePort: 8080
?
四、test1.domain.com ? -->? service1:8080
沒在request中定義主機名(即沒有顯示請求頭)的請求 ? --> ? service5:8080
apiVersion: extensions/v1beta1 kind: Ingress metadata:name: test-ingressnamespace: test spec:rules:- host: test1.domain.comhttp:paths:- backend:serviceName: service1servicePort: 8080- http:paths:- backend:serviceName: service5servicePort: 8080
?
五、https://test1.domain.com ? -->? service1:8080
apiVersion: extensions/v1beta1 kind: Ingress metadata:name: test-ingressnamespace: test spec:rules:- host: test1.domain.comhttp:paths:- backend:serviceName: service1servicePort: 8080tls:- hosts:- test1.domain.comsecretName: domain-tls #證書見下
證書yaml
apiVersion: v1 data:tls.crt: cert(base64) #轉碼見下tls.key: key(base64) kind: Secret metadata:name: domain-tlsnamespace: test type: kubernetes.io/tls
base64轉碼
cat fullchain.pem | base64 | tr '\n' ' ' | sed s/[[:space:]]//g #中間去掉換行和空格 cat privkey.pem | base64 | tr '\n' ' ' | sed s/[[:space:]]//g
?
六、nginx中的設置,在ingress是通過annotations來配置的
apiVersion: extensions/v1beta1 kind: Ingress metadata:name: test-ingressnamespace: testannotations:nginx.ingress.kubernetes.io/proxy-connect-timeout: "600s"nginx.ingress.kubernetes.io/proxy-read-timeout: "600s"nginx.ingress.kubernetes.io/proxy-send-timeout: "600s" spec:rules:- host: test1.domain.comhttp:paths:- backend:serviceName: service1servicePort: 8080path: /
?
詳細ingress鏈接:https://kubernetes.io/docs/concepts/services-networking/ingress/
ingress中annotations的配置選項:https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md