Ruby on rails 带有GCP Cloud SQL的Kubernetes应用程序不接受任何连接。Github上提供完整的源代码
我创建了一个示例Rails 5应用程序,它使用谷歌云PostgreSQL。 我可以使用docker compose up在本地运行该应用程序,但当我将其部署到GCP时,我无法远程连接到该应用程序。 我尝试在他们使用的地方复制Ruby on rails 带有GCP Cloud SQL的Kubernetes应用程序不接受任何连接。Github上提供完整的源代码,ruby-on-rails,kubernetes,google-cloud-sql,google-kubernetes-engine,cloud-sql-proxy,Ruby On Rails,Kubernetes,Google Cloud Sql,Google Kubernetes Engine,Cloud Sql Proxy,我创建了一个示例Rails 5应用程序,它使用谷歌云PostgreSQL。 我可以使用docker compose up在本地运行该应用程序,但当我将其部署到GCP时,我无法远程连接到该应用程序。 我尝试在他们使用的地方复制targetPort:http服务器 rails应用程序是。 我是不是做错了什么-| 在本地运行应用程序可以正常工作 创建一个GKE集群 设置PostgreSQL云SQL 我听从了老师的指示 并用这些值更新了我的config/database.yml和k8s/colors.y
targetPort:http服务器
rails应用程序是。
我是不是做错了什么-|
在本地运行应用程序可以正常工作
创建一个GKE集群
设置PostgreSQL云SQL
我听从了老师的指示
并用这些值更新了我的config/database.yml和k8s/colors.yml
已部署但仍停留在ContainerCreating上
kubectl获得部署
但无法连接到应用程序
kubectl描述部署
Name: colors
Namespace: default
CreationTimestamp: Fri, 13 Jul 2018 10:37:06 +0200
Labels: app=colors
Annotations: deployment.kubernetes.io/revision=1
kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"colors"},"name":"colors","namespace":"default"},"spec":{"repl...
Selector: app=colors
Replicas: 2 desired | 2 updated | 2 total | 0 available | 2 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=colors
Containers:
colors:
Image: docker.io/stabenfeldt/colors:latest
Port: 3000/TCP
Environment:
POSTGRES_HOST: 127.0.0.1:5432
POSTGRES_USER: <set to the key 'username' in secret 'cloudsql-db-credentials'> Optional: false
POSTGRES_PASSWORD: <set to the key 'password' in secret 'cloudsql-db-credentials'> Optional: false
Mounts: <none>
cloudsql-proxy:
Image: gcr.io/cloudsql-docker/gce-proxy:1.11
Port: <none>
Command:
/cloud_sql_proxy
-instances=MY-INSTANCE:europe-west1:staging=tcp:5432
-credential_file=/secrets/cloudsql/credentials.json
Environment: <none>
Mounts:
/secrets/cloudsql from cloudsql-instance-credentials (ro)
Volumes:
cloudsql-instance-credentials:
Type: Secret (a volume populated by a Secret)
SecretName: cloudsql-instance-credentials
Optional: false
Conditions:
Type Status Reason
---- ------ ------
Available False MinimumReplicasUnavailable
Progressing True ReplicaSetUpdated
OldReplicaSets: <none>
NewReplicaSet: colors-d9f744dc (2/2 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 1m deployment-controller Scaled up replica set colors-d9f744dc to 2
名称:颜色
名称空间:默认值
CreationTimestamp:2018年7月13日星期五10:37:06+0200
标签:app=colors
注释:deployment.kubernetes.io/revision=1
kubectl.kubernetes.io/last applicated configuration={“apiVersion”:“apps/v1”,“kind”:“Deployment”,“metadata”:{“annotations”:{},“labels”:{“app”:“colors”},“name”:“colors”,“namespace”:“default”},“spec”:{“repl…”。。。
选择器:app=colors
副本:需要2份|更新2份|共2份|可用0份|不可用2份
策略类型:RollingUpdate
最小就绪秒:0
滚动更新策略:最多25%不可用,最多25%喘振
Pod模板:
标签:app=colors
容器:
颜色:
图片:docker.io/stabenfeldt/colors:latest
端口:3000/TCP
环境:
POSTGRES_主持人:127.0.0.1:5432
POSTGRES_用户:可选:false
POSTGRES_密码:可选:false
挂载:
cloudsql代理:
图片:gcr.io/cloudsqldocker/gce代理:1.11
端口:
命令:
/云sql代理
-instances=MY-INSTANCE:europe-west1:staging=tcp:5432
-凭证文件=/secrets/cloudsql/credentials.json
环境:
挂载:
/来自cloudsql实例凭据(ro)的机密/cloudsql
卷数:
cloudsql实例凭据:
类型:Secret(由Secret填充的卷)
SecretName:cloudsql实例凭据
可选:false
条件:
类型状态原因
---- ------ ------
可用的错误最小值ReplicaSunAvailable
正在进行的真实复制
旧复制集:
NewReplicaSet:colors-d9f744dc(创建了2/2个副本)
活动:
从消息中键入原因年龄
---- ------ ---- ---- -------
正常缩放复制集1m部署控制器将复制集颜色-d9f744dc缩放为2
kubectl描述服务
名称:颜色
名称空间:默认值
标签:
注释:kubectl.kubernetes.io/last applicated configuration={“apiVersion”:“v1”,“种类”:“服务”,“元数据”:{“注释”:{},“名称”:“颜色”,“命名空间”:“默认”},“规范”:{“端口”:[{“端口”:80,“目标端口”:3000}]。。。
选择器:app=colors
类型:负载平衡器
IP:10.55.252.91
负载平衡器入口:35.228.203.46
端口:80/TCP
目标端口:3000/TCP
节点端口:30964/TCP
端点:
会话关联:无
外部流量策略:群集
活动:
从消息中键入原因年龄
---- ------ ---- ---- -------
普通型4m服务控制器集群->负载平衡器
正常确保负载平衡器4m服务控制器确保负载平衡器
正常确保负载平衡器3m服务控制器确保负载平衡器
姓名:kubernetes
名称空间:默认值
标签:组件=apiserver
提供者=kubernetes
注释:
选择器:
类型:集群
IP:10.55.240.1
端口:https 443/TCP
目标端口:443/TCP
终点:35.228.79.249:443
会话关联:ClientIP
活动:
我看不出有任何错误,但这里有一些技巧可以验证Kubernetes对象与YAML相比的外观:
使用该命令可获取有关对象的详细信息,并确保对象设置正确
例如,如果您执行kubectl description deployment
,则应验证是否存在以下行:
Port: 3000/TCP
对于您的服务-kubectl描述服务
:
由于您使用此标签作为选择器,它可能会做一些古怪的事情,并尝试将负载平衡添加到自身,而不是包含应用程序的容器中
另外,作为术语的旁注,GCP(谷歌云平台)是谷歌服务的总称,GKE(谷歌Kubernetes引擎)是为您提供托管Kubernetes集群的服务
希望这能有所帮助。我的电脑中可以有一个工作设置 k8s/colors.yml
您的POSTGRES_主机环境变量必须是localhost,而不是127.0.0.01:5432。您不需要在POSTGRES_主机中添加端口。我用您建议的命令的输出更新了我的帖子。不过,我无法从中获得任何进一步帮助的指针。@martins您是否尝试删除了该应用程序从loadbalancer添加标签?尝试删除loadbalancer(
kubetctl delete services colors
),并使用此命令重新创建它:kubectl expose deployment colors--type“loadbalancer“--port 80--target port 8080
你好@kurtisvg,谢谢!我也试过了,但没有成功。现在它在容器创建中卡住了。请从导出项目中签出代码。\u ID=“your ID”./更新vars并运行.sh:-)1.您的bash脚本看起来不正确
kubectl apply -f k8s/colors.yml
kubectl get pods
NAME READY STATUS RESTARTS AGE
colors-d9f744dc-d5l5v 0/2 ContainerCreating 0 5m
colors-d9f744dc-spmws 0/2 ContainerCreating 0 5m
kubectl logs d9f744dc-d5l5v -c colors # => Nothing logged
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
colors 2 2 2 0 7m
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
colors LoadBalancer 10.55.245.192 35.228.111.217 80:30746/TCP 1h
kubernetes ClusterIP 10.55.240.1 <none> 443/TCP 1h
Name: colors
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"colors","namespace":"default"},"spec":{"ports":[{"port":80,"targetPort":3000}]...
Selector: app=colors
Type: LoadBalancer
IP: 10.55.252.91
LoadBalancer Ingress: 35.228.203.46
Port: <unset> 80/TCP
TargetPort: 3000/TCP
NodePort: <unset> 30964/TCP
Endpoints: <none>
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Type 1m service-controller ClusterIP -> LoadBalancer
Normal EnsuringLoadBalancer 1m service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 30s service-controller Ensured load balancer
apiVersion: apps/v1
kind: Deployment
metadata:
name: colors
labels:
app: colors
spec:
replicas: 2
selector:
matchLabels:
app: colors
template:
metadata:
labels:
app: colors
spec:
containers:
- name: colors
image: docker.io/stabenfeldt/colors:latest
ports:
- name: http-server
containerPort: 3000
env:
- name: POSTGRES_HOST
value: 127.0.0.1:5432
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: cloudsql-db-credentials
key: username
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: cloudsql-db-credentials
key: password
- name: cloudsql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.11
command: ["/cloud_sql_proxy",
"-instances=PROJECT_ID:europe-west1:staging=tcp:5432",
"-credential_file=/secrets/cloudsql/credentials.json"]
volumeMounts:
- name: cloudsql-instance-credentials
mountPath: /secrets/cloudsql
readOnly: true
volumes:
- name: cloudsql-instance-credentials
secret:
secretName: cloudsql-instance-credentials
---
apiVersion: v1
kind: Service
metadata:
name: colors
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 3000
selector:
app: colors
Name: colors
Namespace: default
CreationTimestamp: Fri, 13 Jul 2018 10:37:06 +0200
Labels: app=colors
Annotations: deployment.kubernetes.io/revision=1
kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"colors"},"name":"colors","namespace":"default"},"spec":{"repl...
Selector: app=colors
Replicas: 2 desired | 2 updated | 2 total | 0 available | 2 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=colors
Containers:
colors:
Image: docker.io/stabenfeldt/colors:latest
Port: 3000/TCP
Environment:
POSTGRES_HOST: 127.0.0.1:5432
POSTGRES_USER: <set to the key 'username' in secret 'cloudsql-db-credentials'> Optional: false
POSTGRES_PASSWORD: <set to the key 'password' in secret 'cloudsql-db-credentials'> Optional: false
Mounts: <none>
cloudsql-proxy:
Image: gcr.io/cloudsql-docker/gce-proxy:1.11
Port: <none>
Command:
/cloud_sql_proxy
-instances=MY-INSTANCE:europe-west1:staging=tcp:5432
-credential_file=/secrets/cloudsql/credentials.json
Environment: <none>
Mounts:
/secrets/cloudsql from cloudsql-instance-credentials (ro)
Volumes:
cloudsql-instance-credentials:
Type: Secret (a volume populated by a Secret)
SecretName: cloudsql-instance-credentials
Optional: false
Conditions:
Type Status Reason
---- ------ ------
Available False MinimumReplicasUnavailable
Progressing True ReplicaSetUpdated
OldReplicaSets: <none>
NewReplicaSet: colors-d9f744dc (2/2 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 1m deployment-controller Scaled up replica set colors-d9f744dc to 2
Name: colors
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"colors","namespace":"default"},"spec":{"ports":[{"port":80,"targetPort":3000}]...
Selector: app=colors
Type: LoadBalancer
IP: 10.55.252.91
LoadBalancer Ingress: 35.228.203.46
Port: <unset> 80/TCP
TargetPort: 3000/TCP
NodePort: <unset> 30964/TCP
Endpoints: <none>
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Type 4m service-controller ClusterIP -> LoadBalancer
Normal EnsuringLoadBalancer 4m service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 3m service-controller Ensured load balancer
Name: kubernetes
Namespace: default
Labels: component=apiserver
provider=kubernetes
Annotations: <none>
Selector: <none>
Type: ClusterIP
IP: 10.55.240.1
Port: https 443/TCP
TargetPort: 443/TCP
Endpoints: 35.228.79.249:443
Session Affinity: ClientIP
Events: <none>
Port: 3000/TCP
LoadBalancer Ingress: <PUBLIC_IP>
Port: <unset> 80/TCP
TargetPort: 3000/TCP
labels:
app: colors
# Remember to update MY-INSTANCE
apiVersion: v1
kind: Service
metadata:
name: colors-frontend
labels:
app: colors
tier: frontend
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: http-server
selector:
app: colors
tier: frontend
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: colors-frontend
labels:
app: colors
tier: frontend
spec:
replicas: 3
template:
metadata:
labels:
app: colors
tier: frontend
spec:
volumes:
- name: cloudsql-instance-credentials
secret:
secretName: cloudsql-instance-credentials
containers:
- name: cloudsql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.11
command: ["/cloud_sql_proxy",
"-instances=MY-INSTANCE:europe-west1:development=tcp:5432",
"-credential_file=/secrets/cloudsql/credentials.json"]
volumeMounts:
- name: cloudsql-instance-credentials
mountPath: /secrets/cloudsql
readOnly: true
- name: colors-app
image: docker.io/stabenfeldt/colors:1
imagePullPolicy: Always
env:
- name: RAILS_LOG_TO_STDOUT
value: "true"
- name: RAILS_ENV
value: development
- name: POSTGRES_HOST
value: 127.0.0.1
- name: POSTGRES_USERNAME
valueFrom:
secretKeyRef:
name: cloudsql-db-credentials
key: username
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: cloudsql-db-credentials
key: password
ports:
- name: http-server
containerPort: 3000