Cloud Composer 无法连接到 Cloud SQL 代理服务
Cloud Composer unable to connect to Cloud SQL Proxy service
我们启动了 Cloud Composer 集群,并希望使用它将数据从 Cloud SQL (Postgres) 移动到 BQ。我遵循了这两个资源中提到的有关执行此操作的说明:
Google Cloud Composer and Google Cloud SQL
https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine
我们启动一个 pod 运行 cloud_sql_proxy 并启动一个服务来公开 pod。问题是 Cloud Composer 在尝试使用临时查询进行测试时无法看到说明错误的服务:
cloud not translate host name "sqlproxy-service" to address: Name or service not known"
通过服务IP地址尝试导致页面超时。
传递给 cloud_sql_proxy 的 -instances
在本地环境或云 shell 中使用时有效。日志文件似乎表明从未尝试过任何连接
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
我在这里看到一条评论 可能这甚至不受支持?
气流
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
您在链接的答案中找到的信息是正确的 - 不支持从 Airflow Web 服务器到 Composer 环境中的集群内部服务的临时查询。这是因为 App Engine flex 上的 Web 服务器 运行s 使用自己的独立网络(未连接到 GKE 集群),您可以在 Composer architecture diagram.
中看到
既然如此,您的 SQL 代理必须暴露在 public IP 地址上,以便 Composer Airflow 网络服务器连接到它。对于任何 services/endpoints 侦听 GKE 集群内的 RFC1918 地址(即未暴露在 public IP 上),您将需要额外的网络配置来接受外部连接。
如果这对您来说是一个主要障碍,请考虑 运行宁 self-managed Airflow web server。由于此 Web 服务器 运行 与您设置的 SQL 代理位于同一集群中,因此名称解析将不再有任何问题。
我们启动了 Cloud Composer 集群,并希望使用它将数据从 Cloud SQL (Postgres) 移动到 BQ。我遵循了这两个资源中提到的有关执行此操作的说明:
Google Cloud Composer and Google Cloud SQL
https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine
我们启动一个 pod 运行 cloud_sql_proxy 并启动一个服务来公开 pod。问题是 Cloud Composer 在尝试使用临时查询进行测试时无法看到说明错误的服务:
cloud not translate host name "sqlproxy-service" to address: Name or service not known"
通过服务IP地址尝试导致页面超时。
传递给 cloud_sql_proxy 的 -instances
在本地环境或云 shell 中使用时有效。日志文件似乎表明从未尝试过任何连接
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
我在这里看到一条评论 可能这甚至不受支持?
气流
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
您在链接的答案中找到的信息是正确的 - 不支持从 Airflow Web 服务器到 Composer 环境中的集群内部服务的临时查询。这是因为 App Engine flex 上的 Web 服务器 运行s 使用自己的独立网络(未连接到 GKE 集群),您可以在 Composer architecture diagram.
中看到既然如此,您的 SQL 代理必须暴露在 public IP 地址上,以便 Composer Airflow 网络服务器连接到它。对于任何 services/endpoints 侦听 GKE 集群内的 RFC1918 地址(即未暴露在 public IP 上),您将需要额外的网络配置来接受外部连接。
如果这对您来说是一个主要障碍,请考虑 运行宁 self-managed Airflow web server。由于此 Web 服务器 运行 与您设置的 SQL 代理位于同一集群中,因此名称解析将不再有任何问题。