kubenetes部署公开端口上的Pod

时间:2019-12-01 10:13:21

标签: kubernetes

我的目标是将我的所有端口公开在一项服务下。

我的pod包含一个在端口80下运行的容器化应用。

这是我创建部署的尝试:

apiVersion: apps/v1
kind: Deployment
metadata: name: my-deployment
spec:
    replicas: 5
    selector:
        matchLabels:
            app: myapp
    template:
        metadata:
            name: my-pod
            labels:
                app: myapp
        spec:
            containers:
                - name: httd
                  image: httpd
                  imagePullPolicy: Always
                  ports:
                      - containerPort: 80

但是,我遇到了错误:

error: error parsing deployment.yaml: error converting YAML to JSON: yaml: line 3: mapping values are not allowed in this context

注意:

  • 如果我删除端口部分,将成功创建部署,但是该服务(将其保存在另一个文件中,并且可以在需要时共享)将能够将节点上的端口链接到端口在吊舱中,因为吊舱没有暴露任何端口(同样,它只是在端口上运行的容器)
  • 我经历了this page,它确实说要使用containerPort,所以我不知道自己错过了什么

更新

该错误是在我的部署文件中:修复它之后,我可以同时创建部署和服务,但是该服务仍未在节点上公开。这是我的服务定义:

apiVersion: v1
kind: Service
metadata:
    name: my-service
spec:
    selector:
            app: front-end
    ports:
        - port: 77
          targetPort: 80
          nodePort: 32766
    type: NodePort

如您所见,我将Pod中的端口80映射到节点上的端口32766,并在调用:localhost:32766时返回404

我想念什么?

更新

这是浏览器显示的内容:

enter image description here

3 个答案:

答案 0 :(得分:1)

  

当调用:localhost:32766时,它返回404

这意味着该应用实际上正在响应该请求。但是,您发送了一个请求,请求该应用未实现的 URL 404 Not Found是一个Http状态代码,当Web服务器没有所请求URL的路径时,Web服务器会做出响应。

答案 1 :(得分:0)

我想问题出在service.yaml文件的选择器部分 试试这个

apiVersion: v1
kind: Service
metadata:
    name: my-service
spec:
    selector:
            app: myapp
    ports:
        - port: 77
          targetPort: 80
          nodePort: 32766
    type: NodePort

答案 2 :(得分:0)

除了@shubam_asati发布的内容外,您的服务Yaml还具有port: 77targetPort: 80。但是您的部署容器的端口是80。将port的值更改为与targetPort相同的值(即80),您应该可以通过localhost:<nodePort>连接到应用程序。