无法连接到Kubernetes中的蟑螂舱

无法连接到Kubernetes中的蟑螂舱,kubernetes,deployment,yaml,kubectl,cockroachdb,Kubernetes,Deployment,Yaml,Kubectl,Cockroachdb,我正在开发一个带有web服务和持久层的简单web应用程序。Web持久层是Cockroach db。我正在尝试使用单个命令部署我的应用程序: kubectl apply -f my-app.yaml 应用程序已成功部署。但是,当后端必须在db中存储某些内容时,会出现以下错误: dial tcp: lookup web-service-cockroach on 192.168.65.1:53: no such host postgresql://root@web-service-db:26257

我正在开发一个带有web服务和持久层的简单web应用程序。Web持久层是Cockroach db。我正在尝试使用单个命令部署我的应用程序:

kubectl apply -f my-app.yaml
应用程序已成功部署。但是,当后端必须在db中存储某些内容时,会出现以下错误:

dial tcp: lookup web-service-cockroach on 192.168.65.1:53: no such host
postgresql://root@web-service-db:26257/defaultdb?sslmode=disable
当我启动我的应用程序时,我向cockroach db提供以下连接字符串,连接成功,但当我尝试在db中存储某些内容时,会出现上述错误:

dial tcp: lookup web-service-cockroach on 192.168.65.1:53: no such host
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


提前谢谢

看起来您的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
它将pod的dns服务器设置为k8s服务器


查看kubernetes文档了解更多信息。

如果使用
webs服务cockroach.default.svc.cluster.local
作为数据库的DNS名称,会发生什么?这源于一个注释:我不确定你的服务的名称是什么。yaml有
web服务蟑螂
,但返回的get service命令
web服务蟑螂
服务名称是
web服务蟑螂
。当我尝试使用以下连接字符串时:value:“p”ostgresql://web-service-cockroach.default.svc.cluster.local:26257/defaultdb?sslmode=disable“Db reports:dial tcp[::1]:26257:connect:connection Retired我已经成功地将蟑螂服务设置为连接字符串中的地址,非常感谢Ben!”!谢谢你,马特!我已经在部署规范类别下添加了
dnsPolicy:ClusterFirstWithHostNet
,现在错误是:
拨号tcp[::1]:26257:connect:connection-seeded
`谢谢,马特!我在添加'dnsPolicy:ClusterFirstWithHostNet'后添加了'dnsPolicy:ClusterFirstWithHostNet',我已将蟑螂的地址设置为指向蟑螂服务,并且它工作正常:)`