Cloud Composer не может подключиться к службе Cloud SQL Proxy
Мы запустили кластер Cloud Composer и хотим использовать его для перемещения данных из Cloud SQL (Postgres) в BQ. Я следил за примечаниями об этом, упомянутыми на этих двух ресурсах:
Google Cloud Composer и Google Cloud SQL
https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine
Мы запускаем модуль, запускающий cloud_sql_proxy, и запускаем сервис для его раскрытия. Проблема заключается в том, что Cloud Composer не может увидеть службу, сообщающую об ошибке при попытке использовать специальный запрос для проверки:
cloud not translate host name "sqlproxy-service" to address: Name or service not known"
Попытка использовать IP-адрес службы приводит к тайм-ауту страницы.
-instances
передается работе cloud_sql_proxy при использовании в локальной среде или облачной оболочке. Похоже, что файлы журнала указывают на то, что соединение никогда не пыталось
me@cloudshell:~ (my-proj)$ kubectl logs -l app=sqlproxy-service
me@2018/11/15 13:32:59 current FDs rlimit set to 1048576, wanted limit is 8500. Nothing to do here.
2018/11/15 13:32:59 using credential file for authentication; email=my-service-account@service.iam.gserviceaccount.com
2018/11/15 13:32:59 Listening on 0.0.0.0:5432 for my-proj:my-ds:my-db
2018/11/15 13:32:59 Ready for new connections
Я вижу здесь комментарий /questions/47225467/google-cloud-composer-i-google-cloud-sql-proxy/47225484#47225484 что, возможно, это даже не поддерживается?
Расход воздуха
YAML
apiVersion: v1
kind: Service
metadata:
name: sqlproxy-service
namespace: default
labels:
app: sqlproxy
spec:
ports:
- port: 5432
protocol: TCP
targetPort: 5432
selector:
app: sqlproxy
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sqlproxy
labels:
app: sqlproxy
spec:
selector:
matchLabels:
app: sqlproxy
template:
metadata:
labels:
app: sqlproxy
spec:
containers:
- name: cloudsql-proxy
ports:
- containerPort: 5432
protocol: TCP
image: gcr.io/cloudsql-docker/gce-proxy:latest
imagePullPolicy: Always
command: ["/cloud_sql_proxy",
"-instances=my-proj:my-region:my-db=tcp:0.0.0.0:5432",
"-credential_file=/secrets/cloudsql/credentials.json"]
securityContext:
runAsUser: 2 # non-root user
allowPrivilegeEscalation: false
volumeMounts:
- name: cloudsql-instance-credentials
mountPath: /secrets/cloudsql
readOnly: true
volumes:
- name: cloudsql-instance-credentials
secret:
secretName: cloudsql-instance-credentials
0 ответов
Информация, которую вы нашли в ответе, который вы связали, верна - специальные запросы от веб-сервера Airflow к внутренним службам кластера в среде Composer не поддерживаются. Это связано с тем, что веб-сервер работает на App Engine flex, используя свою собственную отдельную сеть (не подключенную к кластеру GKE), что можно увидеть на диаграмме архитектуры Composer.
Поскольку это так, ваш прокси-сервер SQL должен быть открыт на общедоступном IP-адресе, чтобы веб-сервер Composer Airflow мог подключиться к нему. Для любых служб / конечных точек, прослушивающих адреса RFC1918 в кластере GKE (т.е. не выставленных на общедоступный IP-адрес), вам потребуется дополнительная конфигурация сети для приема внешних подключений.
Если это является для вас серьезным препятствием, рассмотрите возможность запуска автономного веб-сервера Airflow. Поскольку этот веб-сервер будет работать в том же кластере, что и настроенный вами прокси-сервер SQL, проблем с разрешением имен больше не будет.