无法连接到 Kubernetes 中的 Cockroach pod
Unable to connect to Cockroach pod in Kubernetes
我正在开发一个带有网络服务和持久层的简单网络应用程序。 Web 持久层是 Cockroach db。我正在尝试使用单个命令部署我的应用程序:
kubectl apply -f my-app.yaml
应用部署成功。但是,当后端必须在数据库中存储某些内容时,会出现以下错误:
dial tcp: lookup web-service-cockroach on 192.168.65.1:53: no such host
当我启动我的应用程序时,我向 cockroach 数据库提供了以下连接字符串并且连接成功,但是当我尝试在数据库中存储某些内容时出现上述错误:
postgresql://root@web-service-db:26257/defaultdb?sslmode=disable
出于某种原因,web pod 无法与 db pod 通信。我的整个配置是:
# Service for web application
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web-service
type: NodePort
ports:
- protocol: TCP
port: 8080
targetPort: http
nodePort: 30103
externalIPs:
- 192.168.1.9 # < - my local ip
---
# Deployment of web app
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-service
spec:
selector:
matchLabels:
app: web-service
replicas: 1
template:
metadata:
labels:
app: web-service
spec:
hostNetwork: true
containers:
- name: web-service
image: my-local-img:latest
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
hostPort: 8080
env:
- name: DB_CONNECT_STRING
value: "postgresql://root@web-service-db:26257/defaultdb?sslmode=disable"
---
### Kubernetes official doc PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: cockroach-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/tmp/my-local-volueme"
---
### Kubernetes official doc PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cockroach-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 4Gi
---
# Cockroach used by web-service
apiVersion: v1
kind: Service
metadata:
name: web-service-cockroach
labels:
app: web-service-cockroach
spec:
selector:
app: web-service-cockroach
type: NodePort
ports:
- protocol: TCP
port: 26257
targetPort: 26257
nodePort: 30104
---
# Cockroach stateful set used to deploy locally
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web-service-cockroach
spec:
serviceName: web-service-cockroach
replicas: 1
selector:
matchLabels:
app: web-service-cockroach
template:
metadata:
labels:
app: web-service-cockroach
spec:
volumes:
- name: cockroach-pv-storage
persistentVolumeClaim:
claimName: cockroach-pv-claim
containers:
- name: web-service-cockroach
image: cockroachdb/cockroach:latest
command:
- /cockroach/cockroach.sh
- start
- --insecure
volumeMounts:
- mountPath: "/tmp/my-local-volume"
name: cockroach-pv-storage
ports:
- containerPort: 26257
部署后一切正常。
kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 50m
web-service NodePort 10.111.85.64 192.168.1.9 8080:30103/TCP 6m17s
webs-service-cockroach NodePort 10.96.42.121 <none> 26257:30104/TCP 6m8s
kubectl get pods
NAME READY STATUS RESTARTS AGE
web-service-6cc74b5f54-jlvd6 1/1 Running 0 24m
web-service-cockroach-0 1/1 Running 0 24m
提前致谢!
看来您的 DNS 有问题。
dial tcp: lookup web-service-cockroach on 192.168.65.1:53: no such host
地址192.168.65.1
不喜欢kube-dns服务ip。
如果您在使用主机网络的地方可以解释这一点,而且令人惊讶的是您确实这样做了。
使用 hostNetwork: true
时,默认使用的 dns 服务器是主机使用的服务器,绝不会是 kube-dns。
要解决它设置:
spec:
dnsPolicy: ClusterFirstWithHostNet
它将dns服务器设置为pod的k8s服务器。
查看 kubernetes 文档以获取有关 Pod's DNS Policy 的更多信息。
我正在开发一个带有网络服务和持久层的简单网络应用程序。 Web 持久层是 Cockroach db。我正在尝试使用单个命令部署我的应用程序:
kubectl apply -f my-app.yaml
应用部署成功。但是,当后端必须在数据库中存储某些内容时,会出现以下错误:
dial tcp: lookup web-service-cockroach on 192.168.65.1:53: no such host
当我启动我的应用程序时,我向 cockroach 数据库提供了以下连接字符串并且连接成功,但是当我尝试在数据库中存储某些内容时出现上述错误:
postgresql://root@web-service-db:26257/defaultdb?sslmode=disable
出于某种原因,web pod 无法与 db pod 通信。我的整个配置是:
# Service for web application
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web-service
type: NodePort
ports:
- protocol: TCP
port: 8080
targetPort: http
nodePort: 30103
externalIPs:
- 192.168.1.9 # < - my local ip
---
# Deployment of web app
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-service
spec:
selector:
matchLabels:
app: web-service
replicas: 1
template:
metadata:
labels:
app: web-service
spec:
hostNetwork: true
containers:
- name: web-service
image: my-local-img:latest
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
hostPort: 8080
env:
- name: DB_CONNECT_STRING
value: "postgresql://root@web-service-db:26257/defaultdb?sslmode=disable"
---
### Kubernetes official doc PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: cockroach-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/tmp/my-local-volueme"
---
### Kubernetes official doc PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cockroach-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 4Gi
---
# Cockroach used by web-service
apiVersion: v1
kind: Service
metadata:
name: web-service-cockroach
labels:
app: web-service-cockroach
spec:
selector:
app: web-service-cockroach
type: NodePort
ports:
- protocol: TCP
port: 26257
targetPort: 26257
nodePort: 30104
---
# Cockroach stateful set used to deploy locally
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web-service-cockroach
spec:
serviceName: web-service-cockroach
replicas: 1
selector:
matchLabels:
app: web-service-cockroach
template:
metadata:
labels:
app: web-service-cockroach
spec:
volumes:
- name: cockroach-pv-storage
persistentVolumeClaim:
claimName: cockroach-pv-claim
containers:
- name: web-service-cockroach
image: cockroachdb/cockroach:latest
command:
- /cockroach/cockroach.sh
- start
- --insecure
volumeMounts:
- mountPath: "/tmp/my-local-volume"
name: cockroach-pv-storage
ports:
- containerPort: 26257
部署后一切正常。
kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 50m
web-service NodePort 10.111.85.64 192.168.1.9 8080:30103/TCP 6m17s
webs-service-cockroach NodePort 10.96.42.121 <none> 26257:30104/TCP 6m8s
kubectl get pods
NAME READY STATUS RESTARTS AGE
web-service-6cc74b5f54-jlvd6 1/1 Running 0 24m
web-service-cockroach-0 1/1 Running 0 24m
提前致谢!
看来您的 DNS 有问题。
dial tcp: lookup web-service-cockroach on 192.168.65.1:53: no such host
地址192.168.65.1
不喜欢kube-dns服务ip。
如果您在使用主机网络的地方可以解释这一点,而且令人惊讶的是您确实这样做了。
使用 hostNetwork: true
时,默认使用的 dns 服务器是主机使用的服务器,绝不会是 kube-dns。
要解决它设置:
spec:
dnsPolicy: ClusterFirstWithHostNet
它将dns服务器设置为pod的k8s服务器。
查看 kubernetes 文档以获取有关 Pod's DNS Policy 的更多信息。