Как получить клиентам публичный IP на стручке? - PullRequest
1 голос
/ 28 сентября 2019

У меня есть приложение на основе Python-Flask.Я хотел бы получить Публичный IP-адрес клиентов, когда они попадают в мою конечную точку входа.

Я уже пытался изменить externalTrafficPolicy на Local и Cluster.

YAML-файл My Pod *

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: webplatform
  name: webplatform-deployment-6d68c99fc7-xlb8j
  namespace: prod
spec:
  containers:
  - command:
    - python
    - /app/app.py
    envFrom:
    - secretRef:
        name: webplatform-secret
        optional: false
    image: docker.fuchicorp.com/webplatform-prod:0.5
    imagePullPolicy: Always
    name: webplatform-container
  imagePullSecrets:
  - name: nexus-creds
  serviceAccount: webplatform-service-account
  serviceAccountName: webplatform-service-account

YAML-файл My Service

apiVersion: v1
kind: Service
metadata:
  name: webplatform-service
  namespace: prod
spec:
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 32744
    port: 7101
    protocol: TCP
    targetPort: 5000
  selector:
    run: webplatform
  sessionAffinity: None
  type: NodePort

Мой Ingress использует YAML-файл

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    certmanager.k8s.io/cluster-issuer: letsencrypt-fuchicorp-prod
    kubernetes.io/ingress.class: nginx
  generation: 2
  name: ingress-webplaform
  namespace: prod
spec:
  rules:
  - host: academy.fuchicorp.com
    http:
      paths:
      - backend:
          serviceName: webplatform-service
          servicePort: 7101
  tls:
  - hosts:
    - academy.fuchicorp.com
    secretName: letsencrypt-sec-webplatform-prod

Когда я вижу журналы, я вижу, что IP-адреса Ingress-Controllers в журналах

INFO: 10.16.0.16 - - [28/Sep/2019 20:06:12] "GET / HTTP/1.1" 200 -

1 Ответ

1 голос
/ 28 сентября 2019

TL; DR

IP-адрес клиента должен быть доступен через X-Forwarded-For HTTP-заголовок


Он должен предоставляться балансировщиком нагрузки (контроллером входа).Предполагая, что ваш кластер работает в облаке (aws, gcp и т. Д.), Вы получаете IP-адрес клиента через HTTP-заголовок X-Forwarded-For.

Если это предварительный кластер k8s (вы запускаете его на своемсобственное частное облако / локальная машина), настройте балансировщик нагрузки для этого - http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream

...