Kubernetes服务运行正常,但无法从外部访问

时间:2019-02-20 10:43:04

标签: kubernetes google-cloud-platform kubectl

嗨,我正在尝试使用kubernetes在mongo数据库和nodejs应用程序之间进行通信。一切顺利。但我无法从外部环境访问我的api。我也无法远程登录端口。

apiVersion: v1
kind: Service
metadata:
  name: node
  labels:
    app: node
    tier: backend
spec:
  type: NodePort
  ports:
    - port: 3000
      nodePort: 30005
  externalIPs:
    - 34.73.154.127 
  # # Replace with the IP of your minikube node / master node
  # selector:
  #   app: node 
  #   tier: backend  

这是我的服务Yaml文件

当我使用命令检查端口状态时
sudo lsof -i:30005
我可以看到如下结果

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
kube-prox 2925 root    8u  IPv6  32281      0t0  TCP *:30005 (LISTEN)  

现在我应该可以使用ip像这样通过telnet端口了
telnet 34.73.154.127 30005,但我得到的结果如下。

Trying 34.73.154.127...
telnet: Unable to connect to remote host: Connection refused  

如果我的朋友中有人建议端口未打开,那么请注意,我已经从任何地方打开了所有端口范围。

我想让您知道的另一件事是,我在端口30006上本地使用npm部署了示例节点应用程序,并且能够在该端口上进行telnet。因此得出的结论是,所有端口范围都是开放的并且可以正常工作。

这是service的describe命令结果
kubectl describe service/node 结果:

Name:                     node
Namespace:                default
Labels:                   app=node
                          tier=backend
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"node","tier":"backend"},"name":"node","namespace":"defau...
Selector:                 <none>
Type:                     NodePort
IP:                       10.102.42.145
External IPs:             34.73.154.127
Port:                     <unset>  3000/TCP
TargetPort:               3000/TCP
NodePort:                 <unset>  30005/TCP
Endpoints:                <none>
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

请让我知道我怎么了..

ENVIRONMENT: 
cloud :google cloud platform
container :using docker and kubernetes
ubuntu 16.04 LTS
kubernetes 1.13.0

2 个答案:

答案 0 :(得分:2)

嗨,我犯了一个愚蠢的错误。
只是在我的服务yaml文件中未对此进行评论,它开始起作用

# # Replace with the IP of your minikube node / master node
  # selector:
  #   app: node 
  #   tier: backend  

答案 1 :(得分:0)

为了从外部访问您的服务,您需要将此服务公开为LoadBalancer类型,例如:

model.add(Embedding(input_dim=vocab_size,
           output_dim=emdedding_size,
           embeddings_initializer=initializers.Constant(pretrained_weights),
           trainable=False))

Google Cloud Platform将为您提供一个可公开路由的IP地址,并将为您打开防火墙