gpt4 book ai didi

kubernetes - 无法连接到 Kubernetes NodePort 服务

转载 作者:行者123 更新时间:2023-12-02 15:55:03 24 4
gpt4 key购买 nike

我有一个正在运行的 pod,它是使用以下 pod-definition.yaml 创建的:

apiVersion: v1
kind: Pod
metadata:
name: microservice-one-pod-name
labels:
app: microservice-one-app-label
type: front-end
spec:
containers:
- name: microservice-one
image: vismarkjuarez1994/microserviceone
ports:
- containerPort: 2019

然后我使用以下 service-definition.yaml 创建了一个服务:

kind: Service
apiVersion: v1
metadata:
name: microserviceone-service
spec:
ports:
- port: 30008
targetPort: 2019
protocol: TCP
selector:
app: microservice-one-app-label
type: NodePort

然后我运行 kubectl describe node minikube 来找到我应该连接到的节点 IP——它产生了:

Addresses:
InternalIP: 192.168.49.2
Hostname: minikube

但是当我运行以下 curl 命令时,我没有得到任何响应:

curl 192.168.49.2:30008

当我尝试从浏览器访问 192.168.49.2:30008 时,请求也会超时。

pod 日志显示容器已启动并正在运行。为什么我无法访问我的服务?

最佳答案

问题是您正试图通过 port 参数访问您的服务,该参数是服务将公开的内部端口,即使在使用 NodePort 类型时也是如此.

您正在搜索的参数称为 nodePort,可以选择将其与 porttargetPort 一起指定。引用 documentation :

By default and for convenience, the Kubernetes control plane willallocate a port from a range (default: 30000-32767)

由于您没有指定 nodePort,因此会自动选择范围内的一个。您可以通过以下方式检查是哪一个:

kubectl get svc -owide

然后在该端口从外部访问您的服务。

作为替代方案,您可以将服务定义更改为:

kind: Service
apiVersion: v1
metadata:
name: microserviceone-service
spec:
ports:
- port: 30008
targetPort: 2019
nodePort: 30008
protocol: TCP
selector:
app: microservice-one-app-label
type: NodePort

但请记住,您可能需要删除服务并重新创建它以更改分配的 nodePort

关于kubernetes - 无法连接到 Kubernetes NodePort 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71634186/

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