首页 > 解决方案 > 从 docker 容器中使用默认命名空间中的集群 IP 访问 k8s 服务

问题描述

我有一个使用 k8s 编排的服务器,它的服务如下所示

➜  installations ✗ kubectl get svc
NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                               AGE

oxd-server           ClusterIP   10.96.124.25   <none>        8444/TCP,8443/TCP                     3h32m

它是豆荚。

➜  helm git:(helm-rc1) ✗ kubectl get po
NAME                                   READY   STATUS             RESTARTS   AGE

sam-test-oxd-server-6b8f456cb6-5gwwd   1/1     Running            0          3h2m

现在,我有一个 docker 映像,其中包含一个env需要此服务器 URL 的变量。

我从这里有 2 个问题。

  1. docker镜像如何获取URL或访问URL?

  2. 如何在终端中访问相同的 URL,以便通过它发出一些 curl 命令?

我希望我的解释清楚。

标签: dockerkubernetesdocker-composekubernetes-helm

解决方案


  • 您可以使用oxd-server同一命名空间中任何其他 pod 的服务名称来访问它,即,如果该服务由提供 HTTPS 的 pod 支持,您可以在https://oxd-server:8443/.

    如果要访问此服务的客户端 pod 位于不同的命名空间中,则可以使用oxd-server.<namespace>name。在您的情况下,这是oxd-server.default因为您的服务位于默认命名空间中。

  • 要从集群外部(从您的终端)访问此服务以进行本地调试,您可以使用端口转发

    然后,您可以使用 URLlocalhost:8443发出任何请求,请求将被端口转发到服务。

kubectl port-forward svc/oxd-server 8443:8443
  • 如果您想从集群外部访问此服务以进行生产使用,您可以将服务设置为type: NodePorttype: LoadBalancer。在此处查看服务类型

推荐阅读