如何通过HTTP请求连接到同一集群内的Kubernetes pod?
我的Kubernetes集群中有两个吊舱(都是docker图像),我使用的是AWS的EKS。 pod中的一个是API服务,另一个是控制台应用程序 我需要控制台应用程序向API发送HTTP请求,而不使用任何公开服务,如负载平衡器或节点端口 我遇到使用Kube DNS名称访问同一集群内的服务,如下所示:如何通过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
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?