2017-05-04 11 views
1

私はプロキシプロトコルでクライアントIPを維持しようとします。残念ながら、それは動作しません。Azure Kubernetes nginx-Ingress:クライアントIPを保持

AzureのLB => nginxの進入=>サービス

私はイングレスサービスポッドIPで終わります。

イングレスコントローラ展開:

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: nginx-ingress-controller 
    namespace: kube-system 
spec: 
    replicas: 1 
    template: 
    metadata: 
     labels: 
     k8s-app: nginx-ingress-lb 
     annotations: 
     prometheus.io/port: '10254' 
     prometheus.io/scrape: 'true' 
    spec: 
     # hostNetwork makes it possible to use ipv6 and to preserve the source IP correctly regardless of docker configuration 
     # however, it is not a hard dependency of the nginx-ingress-controller itself and it may cause issues if port 10254 already is taken on the host 
     # that said, since hostPort is broken on CNI (https://github.com/kubernetes/kubernetes/issues/31307) we have to use hostNetwork where CNI is used 
     # like with kubeadm 
     # hostNetwork: true 
     terminationGracePeriodSeconds: 60 
     containers: 
     - image: gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.5 
     name: nginx-ingress-controller 
     readinessProbe: 
      httpGet: 
      path: /healthz 
      port: 10254 
      scheme: HTTP 
     livenessProbe: 
      httpGet: 
      path: /healthz 
      port: 10254 
      scheme: HTTP 
      initialDelaySeconds: 10 
      timeoutSeconds: 1 
     ports: 
     - containerPort: 80 
      hostPort: 80 
     - containerPort: 443 
      hostPort: 443 
     env: 
      - name: POD_NAME 
      valueFrom: 
       fieldRef: 
       fieldPath: metadata.name 
      - name: POD_NAMESPACE 
      valueFrom: 
       fieldRef: 
       fieldPath: metadata.namespace 
     args: 
     - /nginx-ingress-controller 
     - --default-backend-service=$(POD_NAMESPACE)/default-http-backend 
     - --configmap=default/nginx-ingress-controller 

イングレスコントローラーサービス:

apiVersion: v1 
kind: Service 
metadata: 
    name: nginx-ingress 
    namespace: kube-system 
    annotations: 
    service.beta.kubernetes.io/external-traffic: "OnlyLocal" 
spec: 
    type: LoadBalancer 
    ports: 
    - port: 80 
     name: http 
    - port: 443 
     name: https 
    selector: 
    k8s-app: nginx-ingress-lb 

nginxのコンフィグマップ:

apiVersion: v1 
metadata: 
    name: nginx-ingress-controller 
data: 
    use-proxy-protocol: "true" 
kind: ConfigMap 

答えて

1

は、それが動作するようになりました。 Ingress Controller Deployment

Iは

gcr.io/google_containers/nginx-ingress-controller:0.8.3 

に画像を変更しconfigmapを除去します。

私はdotnet core apiでポッドに転送するために入力を使用しています。

追加

var options = new ForwardedHeadersOptions() 
    { 
    ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.All, 
    RequireHeaderSymmetry = false, 
    ForwardLimit = null 
    }; 

//add known proxy network(s) here 
options.KnownNetworks.Add(network) 
app.UseForwardedHeaders(options); 

からStartupはトリックをした