2017-08-01 69 views
2

Kubernetes /頭盔進入的通道,我們有一些在我們的生態系統中的微服務和他們兩個處理用戶數據:nginx的和正則表達式

  • 用戶服務 - >

    • POST /用戶
    • GET /用戶/ [[:alnum:]] +
  • 文件服務 - >

    • POST /用戶/ [[:alnum:]] + /文件
    • GET /用戶/ [[:alnum:]] + /文檔/ [[:alnum:]] +

因此,我想在一個入口來定義的:

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: {{.Release.Name}} 
    annotations: 
    kubernetes.io/ingress.class: "nginx" 
    kubernetes.io/tls-acme: "true" 
    ingress.kubernetes.io/enable-cors: "false" 
    ingress.kubernetes.io/ssl-redirect: "true" 
    labels: 
    chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" 
    app: "{{ template "fullname" . }}" 
    heritage: "{{ .Release.Service }}" 
    release: "{{ .Release.Name }}" 
    tier: frontend 
spec: 
    tls: 
    - secretName: {{ template "tls.fullname" . }} 
    hosts: 
    - "staging.ourhost.com" 
    rules: 
    - host: "staging.ourhost.com" 
    http: 
     paths: 
    - path: "https://stackoverflow.com/users/[[:alnum:]]+" 
     backend: 
     serviceName: {{ .Values.api.services.user_service | quote }} 
     servicePort: 8080 
    - path: "https://stackoverflow.com/users/[[:alnum:]]+/documents" 
     backend: 
     serviceName: {{ .Values.api.services.document_service | quote }} 
     servicePort: 8888 

這導致ngix.conf以下被設置:

location /users/[[:alnum:]]+ { 
... 
} 

location /users/[[:alnum:]]+/documents{ 
... 
} 

即正則表達式未解析。

我試圖分裂出來成爲單獨和入節點使用註釋

ingress.kubernetes.io/rewrite-target: "https://stackoverflow.com/users/$1/documents" 

,但是這導致在nginx.conf

location ~* ^/users/[[:alnum:]]+/documents/(?<baseuri>.*) { 
      set $proxy_upstream_name "default-dev-document_service-8888"; 

    ... 

    rewrite /users/[[:alnum:]]+/documents/(.*) /users/$1/documents/$1 break; 
    proxy_pass http://default-dev-document_service-8888; 

     } 

問題(最終)如下:

  • 爲什麼總是附加$ 1?這對我來說似乎很奇怪
  • 有人知道另一種使路徑與正則表達式一起工作的方法嗎?

任何意見將大大apreciated

回答

0

經過大量的搜索,似乎有什麼,我試圖做的是沒有進入(還)有可能。我跟他們打開了一個PR,我正等着看它是否會合並。

我還沒有公開部署可用的此更改的版本,但可以使用k8s的開發人員文檔構建分支