gpt4 book ai didi

service - 为什么我的Kubernetes服务没有在我指定的端口上发布?

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

在过去的几年中,我一直在断断续续地使用Kubernetes,我不确定这种情况是否一直存在(也许这种行为最近有所改变),但是我似乎无法在我打算使用的端口上发布服务-他们总是在较高的随机端口(> 30000)上发布。

例如,我要遍历this walkthrough on Ingress并按照说明创建以下Deployment和Service对象:

---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: hello-world-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: hello-world
spec:
containers:
- image: "gokul93/hello-world:latest"
imagePullPolicy: Always
name: hello-world-container
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: hello-world-svc
spec:
ports:
- port: 9376
protocol: TCP
targetPort: 8080
selector:
app: hello-world
type: NodePort

据此,我应该有一个正在侦听端口8080的服务,但它是一个随机的高端口:
~$ kubectl describe svc hello-world-svc

Name: hello-world-svc
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=hello-world
Type: NodePort
IP: 10.109.24.16
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 31669/TCP
Endpoints: 10.40.0.4:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>

我还验证了我的所有节点都没有在8080上侦听,但它们正在侦听31669。

这不是 super 理想-特别是考虑到Ingress部分将需要知道正在使用什么 servicePort(本演练在8080处对此进行了引用)。

顺便说一句,当我创建Ingress Controller 时,此行为是相同的-与其像在一个好的负载均衡器上监听80和443那样,不如在高随机端口上监听。

我想念什么吗?我做错了吗?

最佳答案

马特

分配随机端口的原因是因为您正在创建NodePort类型的服务。

K8s文档解释了NodePort here

根据您的配置,该服务在端口9376(后端端口为8080)上公开。因此hello-word-svc应该位于:10.109.24.16:9376。本质上,可以通过以下方式之一来获得此服务:

服务IP /端口:-10.109.24.16:9376

节点ip /端口:-[您的计算节点ip]:31669 <-之所以创建此字段,是因为您的服务属于NodePort类型

您还可以直接查询Pod,以测试Pod实际上在公开服务。

Pod ip /端口:10.40.0.4:8080

由于您最终的目标是使用入口 Controller 来实现服务的外部可达性,因此“type:ClusterIP”可能就可以满足您的要求。

关于service - 为什么我的Kubernetes服务没有在我指定的端口上发布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51343743/

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