我认为我没有遗漏任何东西,但是我的 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,现在出现连接超时:
至于端口转发,出现权限错误:
答案 0 :(得分:1)
从文档中,您看到寺庙会像这样 <NodeIP>:<NodePort>
。
NodePort:在静态端口(NodePort)处公开每个节点 IP 上的服务。 NodePort 服务路由到的 ClusterIP 服务会自动创建。您将能够通过请求 <NodeIP>:<NodePort>
从集群外部联系 NodePort 服务。
所以首先,从 kubectl get node -o wide
comamnd 取 NodeIP
。
然后尝试使用 <NodeIP>:<NodePort>
。例如,如果 NodeIP 是 172.19.0.2
,则使用您的子 URL 尝试 172.19.0.2:30001
。
或者,另一种方法是端口转发。在终端中,首先尝试使用 kubectl port-forward svc/society-api-gateway-service 80:80
进行端口转发。然后使用您在 localhost
中尝试过的网址。
答案 1 :(得分:1)
所以,正如我所想,问题与 minikube 没有向我的本地主机开放有关。
首先我不需要 NodePort,但 LoadBalancer 也符合我的需要,所以我的 API 网关变成了 LoadBalancer。
第二,当使用 minikube 时,为了实现我想要的(在我的本地机器上运行 kubernetes,我的 Angular 客户端也在我的本地机器上),你必须创建一个 minikube 隧道,他们在这里解释的确切方式:{{ 3}}