【问题标题】:Configure Kubernetes nginx for an external access为外部访问配置 Kubernetes nginx
【发布时间】:2018-02-09 14:45:38
【问题描述】:

我还是 Kubernetes 和 Lagom 的新手。

我需要从外部服务器调用我的 Lagom 微服务。为此,我认为我需要公开我的 nginx-ingress 以进行外部访问,但我不知道如何。我应该配置“externalIPs”吗?

{
  "apiVersion": "v1",
  "kind": "Service",
  "metadata": {
    "name": "nginx-ingress"
  },
  "spec": {
    "type": "LoadBalancer",
    "ports": [
      {
        "port": 80,
        "name": "http",
        "targetPort": 8080
      },
      {
        "port": 443,
        "name": "https"
      }
    ],
    "externalIPs": [
      "192.168.1.120"
    ],
    "selector": {
      "k8s-app": "nginx-ingress-lb"
    }
  }
}

【问题讨论】:

  • 没有。如果你使用"type": "LoadBalancer",会自动配置外部IP
  • 我有两个 IP,一个用于 http "192.168.99.100:30370",另一个用于 https "192.168.99.100:30023"。我只能从包含 Kubernetes 的本地服务器调用该 IP,但不能从另一台服务器调用该 IP。你有什么解释吗?请。
  • 你在哪里运行 Kubernetes? GKE/AWS/AZURE?
  • 不,我在私人服务器上通过 Minikube 配置了 Kubernetes
  • 您想从哪里访问此服务?从你当地?还是远程?

标签: nginx kubernetes lagom


【解决方案1】:

Minikube 为自己和虚拟机创建一个网络。您需要在外部公开您的服务。

来自 Op 的评论:您的服务获得端口 30370。您需要公开此端口。

ssh -i ~/.minikube/machines/minikube/id_rsa docker@$(minikube ip) -L \*:30370:0.0.0.0:30370

【讨论】:

  • 您好 :),我尝试了您的解决方案,它是有效的。但是,如果我退出 ssh 连接,我将永远无法访问服务。如果我可以路由 minikube IP 会更好。我试过这个命令“sudo route -n add 10.0.0.0/24 $(minikube ip)”但它不起作用:(
  • 你试过 ngrok 了吗?
  • 抱歉迟到了。是的,我已经尝试过了,它是有效的。使用 ngrok,我可以从任何其他设备调用我的服务。谢谢 :) PS:我做了一些其他的研究,我知道我可以使用 Apache 或 Nginx 重定向到我的 minikube ip。
  • 另外,要在后台运行此ssh,请在此命令末尾添加&。这将在后台运行此端口转发。并且,如果此解决方案有效,请批准并投票,以便未来的读者可以将其作为解决方案。 @Imen
  • 完成 :) 再次感谢您 ;) @aerokite
【解决方案2】:

在 Minikube 中,您将使用 kubectl expose 命令公开服务以供外部访问每个 https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/#create-a-service。 Minikube 未在生产环境中使用。

在生产中,您可以通过三种方式使用 kubernetes per https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types 创建 nginx 入口服务并将其公开以供外部访问:

  1. LoadBalancer 自动设置ExternalIP 的服务类型。这在有外部非 k8s、云提供商的负载均衡器(如 CGE、AWS 或 Azure)时使用,并且此外部负载均衡器将为 nginx 入口服务提供ExternalIP
  2. ExternalIPshttps://kubernetes.io/docs/concepts/services-networking/service/#external-ips
  3. NodePort。在这种方法中,可以使用NodeIP:NodePort/url/of/the/service 从集群外部访问服务。

除了 nginx 入口控制器,您还需要一个入口资源。示例请参考https://github.com/nginxinc/kubernetes-ingress/tree/master/examples/complete-example

【讨论】:

  • 您好@Vikram,感谢您的回复,了解如何为外部访问公开服务非常有帮助。但是这个解决方案并不能解决问题,因为它只公开了我的 minikube VM 的服务,我需要添加一些网络配置(路由)来将请求从我的服务器重定向到我的 minikube VM。您可以查看其他回复。
  • @Imen 如果您认为我的回答有用,请支持我的回答!是的,需要将请求从服务器重定向到 minikube VM 的网络配置(路由)。
猜你喜欢
  • 2021-10-30
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
相关资源
最近更新 更多