无法访问kubernetes nodeport服务
Can't access kubernetes nodeport service
我认为我没有遗漏任何东西,但我的 angular 应用程序似乎无法联系我通过 Kubernetes 公开的服务。
每当我尝试在我的本地主机上调用公开的节点端口时,我都会收到连接被拒绝的消息。
部署文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: society-api-gateway-deployment
spec:
replicas: 1
selector:
matchLabels:
app: society-api-gateway-deployment
template:
metadata:
labels:
app: society-api-gateway-deployment
spec:
containers:
- name: society-api-gateway-deployment
image: tbusschaert/society-api-gateway:latest
ports:
- containerPort: 80
服务文件
apiVersion: v1
kind: Service
metadata:
name: society-api-gateway-service
spec:
type: NodePort
selector:
app: society-api-gateway-deployment
ports:
- name: http
port: 80
targetPort: 80
nodePort: 30001
我仔细检查过,呼叫没有到达我的 pod,这是我在呼叫时遇到的错误:
我在本地机器上使用 minikube 和 kubectl。
我别无选择,尽我所能,提前致谢。
编辑 1:
所以按照建议,我使用节点IP来调用服务:
我在 angular 项目中更改了 IP,现在连接超时:
关于端口转发,我得到一个权限错误:
从doc上看,templeate会是这样的<NodeIP>:<NodePort>
。
NodePort: Exposes the Service on each Node's IP at a static port (the NodePort). A ClusterIP Service, to which the NodePort Service routes, is automatically created. You'll be able to contact the NodePort Service, from outside the cluster, by requesting <NodeIP>:<NodePort>
.
所以首先,从 kubectl get node -o wide
comamnd 乘坐 NodeIP
。
然后尝试 <NodeIP>:<NodePort>
。例如,如果 NodeIP 是 172.19.0.2
然后尝试 172.19.0.2:30001
与你的子 url.
或者,另一种方法是使用端口转发。在终端中,首先尝试使用 kubectl port-forward svc/society-api-gateway-service 80:80
进行端口转发。然后使用您尝试过的 url localhost
.
所以,正如我所想,问题与 minikube 没有向我的本地主机开放有关。
首先我不需要 NodePort,但 LoadBalancer 也符合我的需要,所以我的 API 网关变成了 LoadBalancer。
其次,当使用 minikube 时,为了实现我想要的(运行 kubernetes 在我的本地机器上,我的 angular 客户端也在我的本地机器上),你必须创建一个 minikube 隧道,他们在这里是如何解释的:https://minikube.sigs.k8s.io/docs/handbook/accessing/#run-tunnel-in-a-separate-terminal
我认为我没有遗漏任何东西,但我的 angular 应用程序似乎无法联系我通过 Kubernetes 公开的服务。
每当我尝试在我的本地主机上调用公开的节点端口时,我都会收到连接被拒绝的消息。
部署文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: society-api-gateway-deployment
spec:
replicas: 1
selector:
matchLabels:
app: society-api-gateway-deployment
template:
metadata:
labels:
app: society-api-gateway-deployment
spec:
containers:
- name: society-api-gateway-deployment
image: tbusschaert/society-api-gateway:latest
ports:
- containerPort: 80
服务文件
apiVersion: v1
kind: Service
metadata:
name: society-api-gateway-service
spec:
type: NodePort
selector:
app: society-api-gateway-deployment
ports:
- name: http
port: 80
targetPort: 80
nodePort: 30001
我仔细检查过,呼叫没有到达我的 pod,这是我在呼叫时遇到的错误:
我在本地机器上使用 minikube 和 kubectl。
我别无选择,尽我所能,提前致谢。
编辑 1:
所以按照建议,我使用节点IP来调用服务:
我在 angular 项目中更改了 IP,现在连接超时:
关于端口转发,我得到一个权限错误:
从doc上看,templeate会是这样的<NodeIP>:<NodePort>
。
NodePort: Exposes the Service on each Node's IP at a static port (the NodePort). A ClusterIP Service, to which the NodePort Service routes, is automatically created. You'll be able to contact the NodePort Service, from outside the cluster, by requesting
<NodeIP>:<NodePort>
.
所以首先,从 kubectl get node -o wide
comamnd 乘坐 NodeIP
。
然后尝试 <NodeIP>:<NodePort>
。例如,如果 NodeIP 是 172.19.0.2
然后尝试 172.19.0.2:30001
与你的子 url.
或者,另一种方法是使用端口转发。在终端中,首先尝试使用 kubectl port-forward svc/society-api-gateway-service 80:80
进行端口转发。然后使用您尝试过的 url localhost
.
所以,正如我所想,问题与 minikube 没有向我的本地主机开放有关。
首先我不需要 NodePort,但 LoadBalancer 也符合我的需要,所以我的 API 网关变成了 LoadBalancer。
其次,当使用 minikube 时,为了实现我想要的(运行 kubernetes 在我的本地机器上,我的 angular 客户端也在我的本地机器上),你必须创建一个 minikube 隧道,他们在这里是如何解释的:https://minikube.sigs.k8s.io/docs/handbook/accessing/#run-tunnel-in-a-separate-terminal