通过kubernetes服务通过映射端口发送命令

时间:2017-12-08 18:21:47

标签: networking kubernetes port

我有一个可以从特定端口接收命令的应用程序,如下所示:

echo <command> | nc <hostname> <port>

在这种情况下,它是打开端口22082,我相信它是Docker容器。

当我将此应用程序放入kubernetes pod时,我需要通过创建kubernetes服务来公开它。这是我的服务:

 apiVersion: v1                                                                                                                                                                            
 kind: Service                                                                                                                
 metadata:                                                                                                                    
  name: commander                                                                                                            
 spec:                                                                                                                        
   selector:                                                                                                                  
     app: commander                                                                                                           
   ports:                                                                                                                     
     - protocol: TCP                                                                                                          
       port: 22282                                                                                                            
       targetPort: 22082                                                                                                      
   #type: NodePort                                                                                                            
   externalIPs:                                                                                                               
   -  10.10.30.19

注意:我注释掉了NodePort,因为我无法使用该方法公开端口。每当我使用sudo netstat -nlp | grep 22282时,我什么也得不到。

使用外部IP我能够找到端口并使用netcat连接到它,但每当我通过端口发出命令时,它就会挂起。

通常我应该能够发出'help'命令并获取有关该应用的信息。使用kubernetes,我无法获得相同的输出。

现在,如果我在我的应用yaml(不是服务)中使用hostNetwork: true,我可以连接到端口获取我的'帮助'信息。

在不使用hostNetwork配置的情况下,什么可以阻止我的命令到达应用程序?

由于

更新:从sudo iptables --list注意到此消息:

Chain KUBE-SERVICES (1 references)
target     prot opt source               destination         
REJECT     tcp  --  anywhere             172.21.155.23        /* default/commander: has no endpoints */ tcp dpt:22282 reject-with icmp-port-unreachable

更新#2:我通过将spec.template.metadata.labels.app设置为commander解决了上述错误。但是,我仍然无法向应用程序发送任何命令。

1 个答案:

答案 0 :(得分:0)

感谢@sfgroups,我发现我需要像这样设置一个实际的nodePort

apiVersion: v1                                                                                                                                                                            
 kind: Service                                                                                                                
 metadata:                                                                                                                    
  name: commander                                                                                                            
 spec:                                                                                                                        
   selector:                                                                                                                  
     app: commander                                                                                                           
   ports:                                                                                                                     
     - protocol: TCP                                                                                                          
       port: 22282
       nodePort: 32282                                                                                                            
       targetPort: 22082                                                                                                      
   type: NodePort               

非常奇怪的行为,让我想知道port字段的重点是什么!