部署在Kubernetes上的应用程序无法从Internet访问

时间:2017-08-14 03:35:13

标签: containers kubernetes ibm-cloud

我是Kubernetes&泊坞窗。我创建了一个简单的nodejs应用程序并部署在BlueMix Kubernetes上。但我无法访问互联网上的应用程序。 ip& kubernetes中提到的港口无法进入。有人可以帮助我。

我试图http://10.76.193.146:31972,但它没有通过。我不确定这个公共IP是否为10系列。

我还尝试了蓝色混合kubernetes集群中提到的公共IP(http://184.173.1.79:31972) - 下面的截图。但那也失败了。

这是我遵循的步骤。

  1. 在本地创建了一个nodejs应用。它在本地
  2. 上按需运行
    // Load the http module to create an http server.
    var http = require('http');
    
    // Configure our HTTP server to respond with Hello World to all requests.
    var server = http.createServer(function (request, response) {
      response.writeHead(200, {"Content-Type": "text/plain"});
      response.end("Hello World\n");
    });
    
    // Listen on port 8000, IP defaults to 127.0.0.1
    server.listen(8000);
    
    // Put a friendly message on the terminal
    console.log("Server running at http://127.0.0.1:8000/");
    

    ---------- package.json

    {
      "name": "helloworld-nodejs",
      "version": "0.0.1",
      "description": "First Docker",
      "main": "app.js",
      "scripts": {
        "start": "PORT=8000 node ./app.js"
      },
      "author": "",
      "license": "ISC"
    }
    
    1. 在本地创建一个docker容器并运行docker。它运作正常

    2. 将Bluemix注册表上的docker容器上载为

        

      registry.ng.bluemix.net/testkubernetes/helloworld-nodejs:0.0.1

    3. 使用以下YAML文件在Kubernetes中创建节点和服务

    4. ----------节点YAML文件

      apiVersion: v1
      kind: Pod
      metadata:
        name: helloworld-nodejs
        labels:
          name: helloworld-nodejs
      spec:
        containers:
          - name: helloworld-nodejs
            image: registry.ng.bluemix.net/testkubernetes/helloworld-nodejs:0.0.1
            ports:
              - containerPort: 8000
      

      ----------服务YAML

      apiVersion: v1
      kind: Service
      metadata:
        name: helloworld-nodejs
        labels:
          name: helloworld-nodejs
      spec:
        type: NodePort
        selector:
          name: helloworld-nodejs
        ports:
        - port: 8080
      
      1. 应用程序已正确部署并且也在运行,我可以从日志中确认
      2. enter image description here enter image description here

        kubectl获得服务的结果& kubectl get nodes命令

        Result of kubectl get services

        Result of kubectl get nodes

        enter image description here

1 个答案:

答案 0 :(得分:3)

由于您的服务port与您的广告管理系统containerPort不同,因此您必须在服务中指定targetPort

spec:
  type: NodePort
  selector:
    name: helloworld-nodejs
  ports:
    - port: 8080
      targetPort: 8000

根据targetPort上的Kubernetes documentation,它是:

  

要在受其定位的广告连播上访问的端口的编号或名称   服务。 ....如果没有指定,那么'端口的值为'领域   使用(身份图)。