首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kompose未公开NodePort - Docker for Desktop Windows

kompose未公开NodePort - Docker for Desktop Windows
EN

Stack Overflow用户
提问于 2020-01-07 12:40:10
回答 1查看 586关注 0票数 1

我在本地kubernetes集群(默认的Docker - this上下文)上运行这个docker-compose.yml和docker for Desktop Windows:

代码语言:javascript
复制
version: '3'
services:
  web:
    image: customnode
    ports:
    - "3000:3000"
    labels:
      kompose.service.type: nodeport

  datastore:
    image: custommongo
    ports:
    - "27017:27017"

docker-compose up -d可以完美地工作,并在127.0.0.1上的端口3000上公开我的NodeJS。

我正在尝试将其迁移到我的k8s集群,因此遵循https://kompose.io/getting-started/

上面的页面说“如果你还没有运行Kubernetes集群,minikube是最好的入门方式”……我已经在运行OOTB Docker for Desktop集群,所以我假设我不需要minikube。

代码语言:javascript
复制
kompose convert
INFO Kubernetes file "datastore-service.yaml" created
INFO Kubernetes file "web-service.yaml" created
INFO Kubernetes file "datastore-deployment.yaml" created
INFO Kubernetes file "web-deployment.yaml" created

以下是web部署和web服务YAMLS:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.service.type: nodeport
    kompose.version: 1.16.0 (0c01309)
  creationTimestamp: null
  labels:
    io.kompose.service: web
  name: web
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: web
    spec:
      containers:
        image: customnode
        name: web
        ports:
        - containerPort: 3000
        resources: {}
      restartPolicy: Always
status: {}

apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.service.type: nodeport
    kompose.version: 1.16.0 (0c01309)
  creationTimestamp: null
  labels:
    io.kompose.service: web
  name: web
spec:
  ports:
  - name: "3000"
    port: 3000
    targetPort: 3000
  selector:
    io.kompose.service: web
  type: NodePort
status:
  loadBalancer: {}

最后,运行kompose up

代码语言:javascript
复制
kompose up
[36mINFO[0m We are going to create Kubernetes Deployments, Services and PersistentVolumeClaims for your Dockerized application. If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead.

INFO Deploying application in "default" namespace
INFO Successfully created Service: datastore
INFO Successfully created Service: web
INFO Successfully created Deployment: datastore
INFO Successfully created Deployment: web

kubectl get svc的输出

代码语言:javascript
复制
kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
datastore    ClusterIP   10.103.***.***   <none>        27017/TCP        76s
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          23m
web          NodePort    10.106.***.***     <none>        3000:32033/TCP   76s

如你所见,没有我所期望的外部IP。我确信这是我缺乏知识,而不是一个bug,那么我错过了什么呢?

EN

回答 1

Stack Overflow用户

发布于 2020-01-07 13:18:24

仅为LoadBalancer类型服务分配分机IP。要使LoadBalancer服务正常工作,必须在群集上安装LoadBalancer控制器。Else LoadBalancer服务的行为与NodePort服务完全相同。大多数云提供商都支持LoadBalancer服务。

对于NodePort类型的服务,服务绑定到所有节点上节点端口范围内的随机端口。在您的示例中,您可以看到,该服务绑定到端口32033 - 3000:32033/TCP

Node Port range配置为作为Kubernetes API服务器的参数,选项为--service-node-port-range (默认情况下为30000-32767)。当您创建NodePort类型的服务时,将从该范围中随机挑选一个空闲端口。如果要选择自定义端口,可以在Port对象中指定nodePort属性。

例如:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.service.type: nodeport
    kompose.version: 1.16.0 (0c01309)
  creationTimestamp: null
  labels:
    io.kompose.service: web
  name: web
spec:
  ports:
  - name: "3000"
    port: 3000
    targetPort: 3000
    nodePort: 30002         ###### You can choose node port here if needed
  selector:
    io.kompose.service: web
  type: NodePort           ####### Change this line to LoadBalancer if you want an external IP
status:
  loadBalancer: {}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59622257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档