如何解决无法使用 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>
另一种方法是手动添加 endpoints:
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
,
由于您可以进行端口转发,因此正确连接到您的部署的其余 api 服务。在这种情况下,可以使用以下方式解析服务。
首先找出minikube ip
minikube ip
然后是你的服务的节点端口
kubectl get service rest-api-np
获得这两个详细信息后,只需执行 http://(minikube-ip):(node-port)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。