无法从外部访问Minikube的NodePort服务

问题描述 投票:0回答:1

我是 Kubernetes 新手,正在将 Docker 容器部署到 Minikube 服务器。

我已经在 Docker 上安装了 Minikube,该 Docker 运行在具有本地 IP 地址

10.0.0.92
的 Linux 服务器上。当我检查 Minikube 的 IP 时,它返回
192.168.49.2

我正在遵循 Docker 网站上的“部署到 Kubernetes”指南。

这是我的部署和服务配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-name
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app-name
  template:
    metadata:
      labels:
        app: app-name
    spec:
      containers:
        - name: app-name
          image: docker-hub-username/app-name:latest
          ports:
          - containerPort: 9600
---
apiVersion: v1
kind: Service
metadata:
  name: app-name
  namespace: default
spec:
  type: NodePort
  selector:
    app: app-name
  ports:
    - port: 9600
      targetPort: 9600
      nodePort: 30001

应用部署文件后,我注意到 pod 正在不同的 IP 上运行,具体来说

10.244.0.18

我检查了 pod 的日志,以下是我发现的内容:

warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
      Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when the container is destroyed. For more information, visit https://aka.ms/aspnet/dataprotectionwarning
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
      No XML encryptor configured. Key {0078a8d7-d992-4dfd-bd00-f5b1a8595f49} may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://[::]:8080
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /app

但是,当我检查服务器上的服务信息时,我看到了:

NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
app-name                  NodePort    10.103.221.235   <none>        9600:30001/TCP   3h5m

当我运行命令

kubectl describe svc app-name
时,这是输出:

Name:                     app-name 
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=app-name 
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.103.221.235
IPs:                      10.103.221.235
Port:                     <unset>  9600/TCP
TargetPort:               9600/TCP
NodePort:                 <unset>  30001/TCP
Endpoints:                10.244.0.18:9600
Session Affinity:         None
External Traffic Policy:  Cluster
Internal Traffic Policy:  Cluster
Events:                   <none>

最后,当我运行命令

minikube service api-intranet-gateway --url
时,它返回
http://192.168.49.2:30001

根据“部署到 Kubernetes”指南,我被指示通过

http://localhost:30001
访问我的应用程序。但是,我无法从本地主机或通过服务 URL
http://192.168.49.2:30001
访问它。

您能指导我如何解决这个问题吗?另外,您能否向我展示如何设置端口转发,以便它侦听我的本地主机上的端口 9600 (

10.0.0.92
)?我非常感谢您的帮助。

docker ubuntu kubernetes cicd minikube
1个回答
0
投票

https://docs.docker.com/ 上的说明主要适用于 Docker 专有桌面产品中嵌入的 Kubernetes。 如果您使用其他开发者 Kubernetes 设置(Minikube、Kind、k3d),那么您访问 NodePort 服务等内容所需的 URL 将会有所不同。

一般来说,在 Kubernetes 中,NodePort 类型的服务可以通过集群中每个节点上的相同 TCP 端口号进行访问。 可能有数十个或数百个节点,并且它们没有在

kubectl describe

 输出中具体列出。

访问您需要的服务

    任意节点的IP地址;和
  1. 具体NodePort端口。
对于 Minikube,获取可访问 URL 的

官方方法是使用

minikube service api-intranet-gateway --url
您可以看到 URL 由 

minikube ip

 地址(可从主机访问的节点地址)和 
kubectl describe service
 分配的 NodePort 端口号组成。  该路径也在文档中
提到过。 Minikube 通常运行在容器或虚拟机中。 因此,Minikube 服务几乎永远无法以

localhost

的方式访问。

    

© www.soinside.com 2019 - 2024. All rights reserved.