kubernetes - 无法使用 NodePort 转发流量
问题描述
我有一个在 minikube K8 集群内运行的应用程序。这是一个简单的 REST 端点。问题是部署后我无法从本地计算机访问该应用程序。
使用http://{node ip}:{node port}
端点。
但是,如果我这样做:
kubectl port-forward (actual pod name) 8000:8000
该应用程序可以在以下位置访问:127.0.0.1:8000
从我的本地桌面。
这是正确的方法吗?我相信这不是正确的方法吗?因为我直接将我的流量转发到 pod,并且一旦删除了这个 pod,这个端口转发就不会保留。
我在这里缺少什么以及解决此问题的正确方法是什么?
我还配置了一个NodePort
服务,它应该可以处理这个问题,但恐怕它似乎不起作用:
apiVersion: v1
kind: Service
metadata:
labels:
app: rest-api
name: rest-api-np
namespace: rest-api-namespace
spec:
type: NodePort
ports:
- port: 8000
selector:
app: rest-api
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: rest-api
name: rest-api-deployment
namespace: rest-api-namespace
spec:
replicas: 1
selector:
matchLabels:
app: rest-api
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: rest-api
spec:
containers:
- image: oneImage:latest
name: rest-api
解决方案
您遇到问题是因为您的服务放置在default
命名空间中,而您的部署位于rest-api-namespace
命名空间中。
我已经为您部署了 yaml 文件,并且在描述服务时没有端点:
➜ k describe svc rest-api-np
Name: rest-api-np
Namespace: default
Labels: app=rest-api
Annotations: <none>
Selector: app=rest-api
Type: NodePort
IP: 10.100.111.228
Port: <unset> 8000/TCP
TargetPort: 8000/TCP
NodePort: <unset> 31668/TCP
Endpoints: <none>
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
解决方案是在同一个命名空间中创建服务。一旦你这样做了,一个IP地址和端口将出现在该Endpoints
字段中:
➜ k describe svc -n rest-api-namespace rest-api-np
Name: rest-api-np
Namespace: rest-api-namespace
Labels: app=rest-api
Annotations: <none>
Selector: app=rest-api
Type: NodePort
IP: 10.99.49.24
Port: <unset> 8000/TCP
TargetPort: 8000/TCP
NodePort: <unset> 32116/TCP
Endpoints: 172.18.0.3:8000
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
另一种方法是手动添加端点:
apiVersion: v1
kind: Endpoints
metadata:
name: my-service # please note that endpoints and service needs to have the same name
subsets:
- addresses:
- ip: 192.0.2.42 #ip of the pod
ports:
- port: 8000
推荐阅读
- c - 如何从文件加载到结构C的动态数组
- node.js - BrowserSync:本地安装后找不到命令
- javascript - 如何在组件触发的函数中使用动作?
- python-2.7 - 如何解决使用 4.0.0 和 python 2.7.x 创建 Conda 环境时发生的“依赖项缺失”错误
- java - Tinychat.com 机器人
- python - 从给定的数据框创建两个数据框
- c - 比较期间指针地址意外更改
- c# - 我想知道如何从一个函数返回几个对象(一个数据表和一个堆栈)?
- rust - 如何编写自定义派生宏?
- python - Python json dumps always sorts dictionary, how to prevent it from sorting it