Kubernetes-如何通过剩余请求从Pod中的Web服务器访问服务

时间:2018-11-20 18:49:45

标签: kubernetes

我正在寻找使用Kubernetes DNS从Pod中重播Pod的方法。全部都在我的Kubernetes集群中。

我想使用Web应用程序中的http请求者来调用另一个Web应用程序

例如,我想从DashboardWebApp调用ProductWebApp

我发现kubernetes rest api

➜〜kubectl exec -it仪表板-57f598dd76-54s2x-/ bin / bash

➜〜curl -X GET https://4B3449144A41F5488D670E69D41222D.sk1.us-east-1.eks.amazonaws.com/api/v1/namespaces/staging/services/product-app/proxy/api/product/5bf42b2ca5fc050616640dc6 {   “ kind”:“状态”,   “ apiVersion”:“ v1”,   “元数据”:{

},   “ status”:“失败”,   “ message”:“服务\” product-app \“被禁止:用户\” system:anonymous \“无法在名称空间” staging \“”中获得服务/代理,   “ reason”:“ Forbidden”,   “细节”: {     “ name”:“ product-app”,     “ kind”:“服务”   },   “代码”:403 }%

我不明白为什么会阻止

我也找到了这个网址
➜〜curl -XGET product-app.staging.svc.cluster.local / api / product / 5bf42b2ca5fc050616640dc6

但这也不起作用

那么从Pod拨打电话到服务的好方法是什么?

2 个答案:

答案 0 :(得分:4)

相同 Kubernetes集群上同时运行

使用type: ClusterIP服务为要调用的应用(ProductWebApp)定义here所述的服务;配置服务名称为要调用的URI的调用应用(DashboardWebApp)。

例如,假设ProductWebApp位于名为staging的命名空间中,请为ProductWebApp部署定义名为product-app的服务,然后将DashboardWebApp配置为在此URI上调用ProductWebApp:

http://product-app.staging.svc.cluster.local/end/point/as/needed

如果ProductWebApp终结点需要,请用https替换http。请注意,服务名称可以与该服务所在的部署的名称相同。

当Kubernetes集群正在运行DNS服务时(大多数集群都在运行),此方法有效-请参见此link,尤其是A records部分。

答案 1 :(得分:0)

我也遇到了类似的问题

尝试上述解决方案以提供

http://service-name.namespace.svc.cluster.local:端口号

这通常适用于从一个 pod 到达另一个 pod,但是当您尝试到达的 pod 上应用了安全性时,这会失败。

在这里我坚持不变,因此您可以在尝试访问的 pod 中创建一个服务帐户:

service-account.yaml

apiVersion: v1

种类:ServiceAccount

元数据:

name: {{ template "kafka-schema-registry.fullname" . }}

编写授权策略以允许该服务帐户:

auth-policy.yaml

{{- if .Values.auth.enabled -}}

apiVersion: security.istio.io/v1beta1

种类:授权策略

元数据:

名称:{{ 模板“pod-name.fullname”。 }}

规格:

选择器:

matchLabels:

  app: {{ template "*pod-name*.name" . }}

动作:允许

规则:

  • 来自:

    • 来源:

      主体:["cluster.local/ns/name-space/sa/pod-name"]

    到:

    • 操作:

      方法:["GET", "POST", "PUT"]

在您尝试从另一个 Pod 访问的上述 Pod 上完成上述所有更改之后。

其他 Pod 只需要在 deployment.yaml

中提供服务帐户名称

示例如下:

deployment.yaml

apiVersion:apps/v1

种类:部署

元数据:

名称:{{ .Values.name }}

命名空间:{{ .Values.namespace }}

标签:

app: {{ .Values.name }}

规格:

副本:{{ .Values.replicaCount }}

选择器:

matchLabels:

  app: {{ .Values.name }}

模板:

metadata:

  annotations:

    prometheus.io/scrape: "true"

    prometheus.io/path: "/actuator/prometheus"

    prometheus.io/port: {{ .Values.service.port | quote }}

  labels:

    app: {{ .Values.name }}

spec:

  serviceAccountName: {{ *pod-name* }}