【发布时间】:2019-03-27 20:05:46
【问题描述】:
我有三个与我的应用程序相关的不同图像,它们在 docker-compose 中运行良好,并且在 GCP 中的 kubernetes 集群上运行时出现问题。
下面是部署文件。
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
app: mysql-database
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
selector:
app: mysql-database
tier: database
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql-database
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql-database
tier: database
spec:
hostname: mysql
containers:
- image: mysql/mysql-server:5.7
name: mysql
env:
- name: "MYSQL_USER"
value: "root"
- name: "MYSQL_HOST"
value: "mysql"
- name: "MYSQL_DATABASE"
value: "xxxx"
- name: "MYSQL_PORT"
value: "3306"
- name: "MYSQL_PASSWORD"
value: "password"
- name: "MYSQL_ROOT_PASSWORD"
value: "password"
- name: "RAILS_ENV"
value: "production"
ports:
- containerPort: 5432
name: db
---
apiVersion: v1
kind: Service
metadata:
name: dgservice
labels:
app: dgservice
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
selector:
name: dgservice
tier: dgservice
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: dgservice
labels:
app: dgservice
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: dgservice
tier: dgservice
spec:
hostname: dgservice
containers:
- image: gcr.io/sample/sample-image:check_1
name: dgservice
ports:
- containerPort: 8080
name: dgservice
---
apiVersion: v1
kind: Service
metadata:
name: dg-ui
labels:
name: dg-ui
spec:
type: NodePort
ports:
- nodePort: 30156
port: 8000
protocol: TCP
targetPort: 8000
selector:
app: dg-ui
tier: dg
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: dg-ui
labels:
app: dg-ui
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: dg-ui
tier: dg
spec:
hostname: dg-ui
containers:
- image: gcr.io/sample/sample:latest
name: dg-ui
env:
- name: "MYSQL_USER"
value: "root"
- name: "MYSQL_HOST"
value: "mysql"
- name: "MYSQL_DATABASE"
value: "xxxx"
- name: "MYSQL_PORT"
value: "3306"
- name: "MYSQL_PASSWORD"
value: "password"
- name: "MYSQL_ROOT_PASSWORD"
value: "password"
- name: "RAILS_ENV"
value: "production"
- name: "DG_SERVICE_HOST"
value: "dgservice"
ports:
- containerPort: 8000
name: dg-ui
图像也从 GCR 中成功提取。
mysql 和 ui 服务之间的连接也可以正常工作,我的数据正在迁移,没有任何问题。但是服务和ui之间没有建立连接。
为什么 ui 无法访问我的应用程序中的服务?
【问题讨论】:
-
嗨,如果服务之间的通信是内部的,那么值应该是
type: ClusterIP而不是type: NodePort -
你有什么错误?你能卷曲到服务吗?
-
@SureshVishnoi curl 无法正常工作。
kubectl exec -it dg-ui-586c69fdb8-8wvdn bash root@dg-ui:/home/app/webapp# curl http://dgservice:8080/fieldTypes/metadata curl: (7) Failed to connect to dgservice port 8080: Connection timed out root@dg-ui:/home/app/webapp# command terminated with exit code 137。但是当我从 dgservice 节点运行时,同样的 curl 工作正常 -
@SureshVishnoi 我也尝试过使用 ClusterIP。还是不行
-
嗨,你能运行
kubectl describe service dgservice和kubectl get endpoints dgservice
标签: docker kubernetes google-kubernetes-engine