【发布时间】:2021-06-07 10:41:53
【问题描述】:
我正在将 GoLang 聊天服务器部署到 Google App Engine 灵活,同时通过 vpc_access_connector 连接到 Google Cloud 中的 Redis 实例
翻遍了一堆官方资源和SO posts无济于事。
基本上,我对我的 golang 应用程序进行了 docker 化,它能够很好地连接到本地 Redis 主机。然后,我继续使用以下命令将其部署到 Google Cloud,但 Google 抛出了拨号错误。
我需要在 docker 端进行任何其他设置以启用网络连接吗?还是其他原因?
部署错误
这个内部 IP 10.177.235.139:6379 是 Google 在创建 Redis 实例后返回的。请注意,在将其部署到 Google App Engine 之前,我已在我的应用程序中替换了此 IP。
应用和 Redis 实例都在同一个默认网络和同一个区域中。
{"level":"error","addr":"10.177.235.139:6379","error":"dial tcp 10.177.235.139:6379: i/o timeout","time":"2021-06-07T10:30:31Z","message":"error dialing to Redis"}
构建命令
# create a redis instance
gcloud redis instances create prulia-redis --size=2 --region=asia-southeast1 --redis-version=redis_4_0
# get internal ip
gcloud redis instances describe prulia-redis --region=asia-southeast1
# enable serverless vpc api
gcloud services enable vpcaccess.googleapis.com
# create a vpc connector
gcloud compute networks vpc-access connectors create prulia-redis-connector --network default \
--region asia-southeast1 --range 10.10.0.0/28
# check cpnnector status
gcloud compute networks vpc-access connectors describe prulia-redis-connector --region asia-southeast1
# create firewall rule for port 6379
gcloud compute firewall-rules create firewall-redis --network default --allow tcp:6379
# deploy application
gcloud app deploy
app.yaml
请注意,我没有在此处包含环境,因为应用程序运行配置文件。
runtime: custom
env: flex
service: chat
manual_scaling:
instances: 1
resources:
cpu: 2
memory_gb: 6
disk_size_gb: 20
volumes:
- name: ramdisk1
volume_type: tmpfs
size_gb: 2.5
network:
forwarded_ports:
- 6379/tcp
vpc_access_connector:
name: projects/pruliaagm/locations/asia-southeast1/connectors/prulia-redis-connector
Dockerfile
FROM golang:1.15
RUN apt-get install -y ca-certificates
ADD . /app
WORKDIR /app
RUN make build
EXPOSE 8080 6379
CMD ["/app/chat-server"]
【问题讨论】:
-
请提供您要连接到 Redis 的代码 sn-p。
-
@DebdutGoswami 就是一个普通的简单的golang redis拨号方法向内部IP发出请求,不要以为和代码有什么关系
-
拨号地址是如何得出的,我认为这是@Debdut 的目标。这很可能是 DNS 问题。
标签: docker go google-cloud-platform redis gcloud