minikube 服务 %servicename% --url return 无

minikube service %servicename% --url return nothing

我正在尝试公开我的 api 以便我可以向它发送请求。但是,当我使用命令 minikube service api --url 时,我什么也没得到。根据 kubectl get pods,我所有的 pods 都 运行 很好,所以我对这可能是什么感到困惑。

api-1007925651-0rt1n       1/1       Running   0          26m
auth-1671920045-0f85w      1/1       Running   0          26m
blankit-app                1/1       Running   5          5d
logging-2525807854-2gfwz   1/1       Running   0          26m
mongo-1361605738-0fdq4     1/1       Running   0          26m


jwl:.build jakewlace$ kubectl get services

NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)     AGE
api          10.0.0.194   <none>        3001/TCP    23m
auth         10.0.0.36    <none>        3100/TCP    23m
kubernetes   10.0.0.1     <none>        443/TCP     5d
logging      10.0.0.118   <none>        3200/TCP    23m
mongo        10.0.0.132   <none>        27017/TCP   23m

jwl:.build jakewlace$
jwl:.build jakewlace$ minikube service api --url
jwl:.build jakewlace$

非常感谢任何帮助,谢谢。

我意识到这里的问题可能被认为是最小的,但那是因为我不确定我可以从我一直关注的教程中展示的更多信息是否应该有效。如果您需要更多信息,请告诉我,我会通知您。

编辑:

api-service.yml

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: api
  name: api
spec:
  ports:
  - name: "3001"
    port: 3001
    targetPort: 3001
  selector:
    io.kompose.service: api
status:
  loadBalancer: {}

api-deployment.yml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: api
  name: api
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: api
    spec:
      containers:
      - image: blankit/web:0.0.1
        name: api
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3001
        resources: {}
      restartPolicy: Always
status: {}

您的配置没问题,但只缺少一件事。

Kubernetes 中有很多种Services,但在这种情况下你应该知道其中的两种:

ClusterIP Services:
Exposes the service on a cluster-internal IP. Choosing this value makes the service only reachable from within the cluster. This is the default.

NodePort:
Exposes the service on each Node’s IP at a static port (the NodePort). A ClusterIP service, to which the NodePort service will route, is automatically created. You’ll be able to contact the NodePort service, from outside the cluster, by requesting <NodeIP>:<NodePort>.

注:
如果你有一个多节点集群,并且你已经公开了一个 NodePort 服务,你可以从同一端口上的任何其他节点访问,不一定是 pod 部署到的同一节点.

因此,回到您的服务,您应该在规范中指定服务类型:

kind: Service
apiVersion: v1
metadata:
  ...
spec:
  type: NodePort
  selector:
    ...
  ports:
  - protocol: TCP
    port: 3001

现在如果你minikube service api --url,它应该return一个URL像http://<NodeIP>:<NodePort>

注意:默认的 Kubernetes 配置会从 30000-32767 中随机选择一个端口。但如果需要,您可以覆盖它。


有用的参考资料: