Kubernetes服务通信isse-Kubedns

Kubernetes服务通信isse-Kubedns,kubernetes,kube-dns,Kubernetes,Kube Dns,我有两个映射到两个服务的吊舱,在我的笔记本电脑中使用虚拟机启动和运行。我必须工作。一个pod是webservice,另一个是mongodb webapppod的规格如下所示 spec: containers: - resources: limits: cpu: 0.5 . . name: wsemp ports: - containerPort: 8080 #

我有两个映射到两个服务的吊舱,在我的笔记本电脑中使用虚拟机启动和运行。我必须工作。一个pod是webservice,另一个是mongodb

webapppod的规格如下所示

spec:
  containers:
    - resources:
        limits:
          cpu: 0.5
          .
          .
      name: wsemp
      ports:
        - containerPort: 8080
  #     name: wsemp
  #command: ["java","-Dspring.data.mongodb.uri=mongodb://192.168.6.103:30061/microservices", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
  command: ["java","-Dspring.data.mongodb.uri=mongodb://mongoservice/microservices", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
相应服务的规范

apiVersion: v1
kind: Service
metadata:
  labels:
    name: webappservice
  name: webappservice
spec:
  ports:
   - port: 8080
     nodePort: 30062
     targetPort: 8080
     protocol: TCP
  type: NodePort
  selector:
    name: webapp
Mongodb吊舱规格

apiVersion: v1
kind: Pod
metadata:
  name: mongodb
  labels:
    name: mongodb
spec:
  containers:
    .
    .
  name: mongodb
  ports:
    - containerPort: 27017
Mongodb服务规范

apiVersion: v1
kind: Service
metadata:
  labels:
    name: mongodb
  name: mongoservice
spec:
  ports:
   - port: 27017
     nodePort: 30061
     targetPort: 27017
     protocol: TCP
  type: NodePort
  selector:
    name: mongodb
评论后更新了服务中的目标端口

发行

webapp启动时无法连接到mongoservice端口,启动时出现此错误

Exception in monitor thread while connecting to server mongoservice:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.connection.SocketStream.open(SocketStream.java:63) ~[mongodb-driver-core-3.2.2.jar!/:na]
at        com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) ~[mongodb-driver-core-3.2.2.jar!/:na]
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:128) ~[mongodb-driver-core-3.2.2.jar!/:na]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_111]
描述svc

kubectl describe svc mongoservice
Name:           mongoservice
Namespace:      default
Labels:         name=mongodb
Selector:       name=mongodb
Type:           NodePort
IP:         10.254.146.189
Port:           <unset> 27017/TCP
NodePort:       <unset> 30061/TCP
Endpoints:      172.17.99.2:27017
Session Affinity:   None
No events.

kubectl describe svc webappservice 
Name:           webappservice
Namespace:      default
Labels:         name=webappservice
Selector:       name=webapp
Type:           NodePort
IP:         10.254.112.121
Port:           <unset> 8080/TCP
NodePort:       <unset> 30062/TCP
Endpoints:      172.17.99.3:8080
Session Affinity:   None
No events.
mongodb容器在启动时没有错误

尝试按照中的步骤进行操作,但被卡在上面,上面说尝试重新启动kube代理,将-V标志设置为4,因为我不知道怎么做

我不是一个善于交际的人,所以我不知道在这方面该如何分析,需要分析什么。任何调试技巧都会有很大帮助

谢谢。

请注意,curl默认执行HTTP请求,但您尝试访问的主机中的端口27017未绑定到理解此类协议的应用程序。通常,在这些情况下,您会使用netcat:

nc-zv mongoservice 27017

这将报告来自该主机的端口27017是否打开

nc=网络猫 -z扫描侦听守护进程而不发送数据 -v增加了冗长 关于MongoDB文件,必须记住设置targetPort指令。如中所述

此规范将创建一个服务,该服务以带有run:my nginx标签的任何Pod上的TCP端口80为目标,并在抽象服务端口targetPort:是容器接受流量的端口,port:是抽象服务端口,可以是其他Pod用于访问该服务的任何端口。查看服务API对象以查看服务定义中支持的字段列表

因此,只需将其设置为27017即可实现一致性


在遵循这些建议后,您不应该遇到问题。继续努力,尽可能多地学习

iptables规则看起来不错,但不确定kubernetes中使用了什么网络解决方案法兰绒/印花布。您可以检查您是否可以从您的web pod访问kube dns pod IP

谢谢。我得到了一个线索,因为我使用的是法兰绒网络,所以法兰绒网络中的吊舱之间的通信出现了问题

特别是这一部分,如链接中所述,FLANNEL_OPTIONS=-iface=eth1


谢谢。

你好,大卫,感谢您的回复。添加了mongodb-service.yaml文件中提到的targetPort。端口:-端口:27017节点端口:30061尝试在容器中执行时targetPort:27017root@webapp:/nc-zvmongoservice 27017 mongoservice.default.svc.cluster.local[10.254.77.233]27017:连接被拒绝在webapp日志启动过程中仍出现相同错误。连接到服务器mongoservice时,监视器线程中出现异常:27017 com.mongodb.mongoscocketopenexception:异常打开套接字,但我在mongodb容器日志中看到它正在侦听端口27017。**mongodb启动:pid=1 Port=27017 dbpath=/data/db 64位主机=mongodb。等待端口27017上的连接**也对webappservice和mongoservice中的节点报告进行了评论,并尝试了,因为这与虚拟箱VM中的内部网络通信有关。端口:-端口:27017节点端口:30061目标端口:27017协议:TCP类型:节点端口。仍然遇到相同的错误。
root@webapp:/# nslookup mongoservice
Server:     10.254.0.2
Address:    10.254.0.2#53

Non-authoritative answer:
Name:   mongoservice.default.svc.cluster.local
Address: 10.254.146.189

root@webapp:/# curl 10.254.146.189:27017
curl: (7) Failed to connect to 10.254.146.189 port 27017: Connection refused
root@webapp:/# curl mongoservice:27017
curl: (7) Failed to connect to mongoservice port 27017: Connection refused


sudo iptables-save | grep webapp

-A KUBE-NODEPORTS -p tcp -m comment --comment "default/webappservice:" -m tcp --dport 30062 -j KUBE-MARK-MASQ
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/webappservice:" -m tcp --dport 30062 -j KUBE-SVC-NQBDRRKQULANV7O3
-A KUBE-SEP-IE7EBTQCN7T6HXC4 -s 172.17.99.3/32 -m comment --comment "default/webappservice:" -j KUBE-MARK-MASQ
-A KUBE-SEP-IE7EBTQCN7T6HXC4 -p tcp -m comment --comment "default/webappservice:" -m tcp -j DNAT --to-destination 172.17.99.3:8080
-A KUBE-SERVICES -d 10.254.217.24/32 -p tcp -m comment --comment "default/webappservice: cluster IP" -m tcp --dport 8080 -j KUBE-SVC-NQBDRRKQULANV7O3
-A KUBE-SVC-NQBDRRKQULANV7O3 -m comment --comment "default/webappservice:" -j KUBE-SEP-IE7EBTQCN7T6HXC4
$ curl 10.254.217.24:8080
{"timestamp":1486678423757,"status":404,"error":"Not Found","message":"No message available","path":"/"}[osboxes@kube-node1 ~]$ 


sudo iptables-save | grep mongodb
[osboxes@osboxes ~]$ sudo iptables-save | grep mongo
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/mongoservice:" -m tcp --dport 30061 -j KUBE-MARK-MASQ
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/mongoservice:" -m tcp --dport 30061 -j KUBE-SVC-2HQWGC3WSIBZF7CN
-A KUBE-SEP-FVWOWAWXXVAVIQ5O -s 172.17.99.2/32 -m comment --comment "default/mongoservice:" -j KUBE-MARK-MASQ
-A KUBE-SEP-FVWOWAWXXVAVIQ5O -p tcp -m comment --comment "default/mongoservice:" -m tcp -j DNAT --to-destination 172.17.99.2:27017
-A KUBE-SERVICES -d 10.254.146.189/32 -p tcp -m comment --comment "default/mongoservice: cluster IP" -m tcp --dport 27017 -j KUBE-SVC-2HQWGC3WSIBZF7CN
-A KUBE-SVC-2HQWGC3WSIBZF7CN -m comment --comment "default/mongoservice:" -j KUBE-SEP-FVWOWAWXXVAVIQ5O
[osboxes@osboxes ~]$ sudo curl  10.254.146.189:8080
^C[osboxes@osboxes ~]$ sudo curl  10.254.146.189:27017

It looks like you are trying to access MongoDB over HTTP on the native driver port.


root@mongodb:/# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN     
tcp        0      0 172.17.99.2:60724       151.101.128.204:80      TIME_WAIT  
tcp        0      0 172.17.99.2:60728       151.101.128.204:80      TIME_WAIT