gpt4 book ai didi

docker - kompose 不公开 NodePort - 用于桌面 Windows 的 Docker

转载 作者:行者123 更新时间:2023-12-02 12:13:48 25 4
gpt4 key购买 nike

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

version: '3'
services:
web:
image: customnode
ports:
- "3000:3000"
labels:
kompose.service.type: nodeport

datastore:
image: custommongo
ports:
- "27017:27017"
docker-compose up -d完美运行并将我的 NodeJS 暴露在端口 3000 上在 127.0.0.1 .

我正在尝试迁移我的 k8s 集群,所以遵循 https://kompose.io/getting-started/

上面的页面说“如果你还没有运行 Kubernetes 集群,minikube 是最好的入门方式”......我已经在运行 OOTB Docker for Desktop 集群,所以我假设我不需要 minikube。
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:
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 :
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 的输出:
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。我确定这是我缺乏知识,而不是错误,所以我错过了什么?

最佳答案

外部 IP 仅分配给 LoadBalancer类型服务。一个 LoadBalancer LoadBalancer 的集群上必须安装 Controller 服务工作。其他 LoadBalancer服务的行为与 NodePort 完全相同服务。大多数云提供商都支持 LoadBalancer服务。

对于 NodePort类型服务,服务绑定(bind)到所有节点上节点端口范围内的随机端口。在您的情况下,您可以看到,该服务绑定(bind)到端口 32033 - 3000:32033/TCP .

节点端口范围配置为 Kubernetes API 服务器的参数,选项为 --service-node-port-range。 (默认为 30000-32767)。当你创建一个 NodePort 类型的服务时,会从这个范围中选择一个随机的空闲端口。如果要选择自定义端口,可以指定nodePort Port 中的属性目的。

例如:

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: {}

关于docker - kompose 不公开 NodePort - 用于桌面 Windows 的 Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59622257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com