如何通过HTTP请求连接到同一集群内的Kubernetes pod?

如何通过HTTP请求连接到同一集群内的Kubernetes pod?,kubernetes,amazon-eks,Kubernetes,Amazon Eks,我的Kubernetes集群中有两个吊舱(都是docker图像),我使用的是AWS的EKS。 pod中的一个是API服务,另一个是控制台应用程序 我需要控制台应用程序向API发送HTTP请求,而不使用任何公开服务,如负载平衡器或节点端口 我遇到使用Kube DNS名称访问同一集群内的服务,如下所示: my-api.default.svc.cluster.local:5007 但是,当我部署控制台应用程序时,我的控制台应用程序抛出以下错误: Only 'http' and 'https' sch

我的Kubernetes集群中有两个吊舱(都是docker图像),我使用的是AWS的EKS。 pod中的一个是API服务,另一个是控制台应用程序

我需要控制台应用程序向API发送HTTP请求,而不使用任何公开服务,如负载平衡器或节点端口

我遇到使用Kube DNS名称访问同一集群内的服务,如下所示:

my-api.default.svc.cluster.local:5007
但是,当我部署控制台应用程序时,我的控制台应用程序抛出以下错误:

Only 'http' and 'https' schemes are allowed. (Parameter 'requestUri')
 ---> System.ArgumentException: Only 'http' and 'https' schemes are allowed. (Parameter 'requestUri')
   at System.Net.Http.HttpRequestMessage.InitializeValues(HttpMethod method, Uri requestUri)
   at System.Net.Http.HttpRequestMessage..ctor(HttpMethod method, String requestUri)
从错误中,我了解到这是因为Kube DNS名称不完全是web请求URI,因为它不是以
http
https
开头的

我的问题是,我是否可以将其转换为HTTP请求? 简单地添加
http
是否有效


或者有没有其他方法可以在不公开API服务的情况下连接到API?

您正在搜索的是ClusterIP服务,您可以查看Kubernetes文档中的各种类型()

集群IP:在集群内部IP上公开服务。选择这个 值使服务只能从群集中访问。这 是默认的服务类型

这意味着,如果您为您尝试访问的API Pod创建服务,那么您将能够使用Kube DNS名称访问它,如下所示:

service-name.namespace.svc.cluster.local
或者,如果您在同一名称空间中,只需:

service-name
这意味着您可以通过以下方式向服务发出http或https请求:

http://service-name # will resolve if Pods are in the same namespace, default to port 80
http://service-name.namespace.svc.cluster.local # will default to port 80
http://service-name.namespace.svc.cluster.local:5007
https://service-name.namespace.svc.cluster.local:5007 # will go with https
一旦名称在集群内解析,您就可以像访问普通命名资源一样访问它,指定协议、端口等等。如果端点解析(从另一个Pod内部),则可以使用curl或wget进行测试

关于如何声明ClusterIP服务,下面是一个示例:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp # this needs to match with Pods labels (https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/)
  ports:
    - name: my-name
      protocol: TCP
      # you could re-target the port to expose a port on the API server but use another on the client
      port: 5007
      targetPort: 5007

您是否尝试通过在域名http://myapi.default.svc.cluster.local:5007之前添加http://myapi.default.svc.cluster.local:5007来点击myapi.default.svc.cluster.local:5007?