Как мне получить ip-адрес клиента с помощью kubernetes?

# # #go #kubernetes #google-cloud-platform #ip

Вопрос:

Я пытаюсь получить реальный ip-адрес клиента с помощью kubernetes. Многие люди говорили, что я должен поместить externalTrafficPolicy: Local в свои настройки kubernetes, вопрос в том, что я даже не знаю, куда его поместить, и продолжаю получать ошибки. Вот мой файл кода yaml

 apiVersion: apps/v1
kind: Deployment
metadata:
  name: <DEV_GCP_APP_NAME>
  labels:
    app: <DEV_GCP_APP_NAME>
spec:
  // when i put externalTrafficPolicy: Local here it says unknown field "externalTrafficPolicy" in io.k8s.api.apps.v1.DeploymentSpec
  replicas: 1
  selector:
    matchLabels:
      app: <DEV_GCP_APP_NAME>
  template:
    metadata:
      labels:
        app: <DEV_GCP_APP_NAME>
    spec:
      // when i put externalTrafficPolicy: Local here it says unknown field "externalTrafficPolicy" in io.k8s.api.core.v1.PodSpec
      containers:
        - name: <DEV_GCP_APP_NAME>
          image: gcr.io/<DEV_GCP_PROJECT_NAME>/<DEV_GCP_APP_NAME>:<CI_PIPELINE_ID>
          env:
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: data-service-project
                  key: db_user
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: data-service-project
                  key: db_pass
            - name: DB_HOST
              valueFrom:
                secretKeyRef:
                  name: data-service-project
                  key: db_host
            - name: DB_PORT
              valueFrom:
                secretKeyRef:
                  name: data-service-project
                  key: db_port
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: data-service-project
                  key: db_name
            - name: PG_USER
              valueFrom:
                secretKeyRef:
                  name: data-service-project
                  key: pg_user
            - name: PG_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: data-service-project
                  key: pg_password
            - name: PG_HOST
              valueFrom:
                secretKeyRef:
                  name: data-service-project
                  key: pg_host
            - name: PG_PORT
              valueFrom:
                secretKeyRef:
                  name: data-service-project
                  key: pg_port
            - name: PG_NAME
              valueFrom:
                secretKeyRef:
                  name: data-service-project
                  key: pg_name
            - name: PORT
              valueFrom:
                secretKeyRef:
                  name: data-service-project
                  key: port
            - name: TOKEN_SECRET
              valueFrom:
                secretKeyRef:
                  name: data-service-project
                  key: token_secret
            - name: COOKIES_SECRET
              valueFrom:
                secretKeyRef:
                  name: data-service-project
                  key: cookies_secret
            - name: GIN_MODE
              value: debug
            - name: DISABLE_EXTERNAL_SERVICE
              value: 'false'
        - name: cloudsql-proxy
          image: gcr.io/cloudsql-docker/gce-proxy:1.16
          command: [ "/cloud_sql_proxy",
                     "-instances=<DEV_GCP_DB_INSTANCE>",
                     "-credential_file=/secrets/cloudsql/sql_credentials.json" ]
          volumeMounts:
            - name: my-secrets-volume
              mountPath: /secrets/cloudsql
              readOnly: true
      volumes:
        - name: my-secrets-volume
          secret:
            secretName: cloudsql-instance-credentials
---
apiVersion: networking.gke.io/v1beta1
kind: ManagedCertificate
metadata:
  name: <DEV_GCP_APP_NAME>-certificate
spec:
  domains:
    - <DEV_GCP_APP_URL>
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: <DEV_GCP_APP_NAME>-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: <DEV_GCP_APP_NAME>-static-ip
    networking.gke.io/managed-certificates: <DEV_GCP_APP_NAME>-certificate
spec:
  backend:
    serviceName: <DEV_GCP_APP_NAME>-service
    servicePort: 80
    // when i put externalTrafficPolicy: Local here it says unknown field "externalTrafficPolicy" in io.k8s.api.networking.v1beta1.IngressBackend
 

Куда я должен поместить эти внешние политические вещи ? Кто-нибудь может мне помочь, пожалуйста. Спасибо, ребята 🙂

Ответ №1:

externalTrafficPolicy относится к спецификациям обслуживания:

 kind: Service
...
spec:
  externalTrafficPolicy: Local
 

См.Более подробную документацию по сохранению исходного IP-адреса клиента и пример в документации Kubernetes.