我正在寻找使用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拨打电话到服务的好方法是什么?
答案 0 :(得分:4)
在相同 Kubernetes集群上同时运行 和 使用 例如,假设ProductWebApp位于名为 如果ProductWebApp终结点需要,请用https替换http。请注意,服务名称可以与该服务所在的部署的名称相同。 当Kubernetes集群正在运行DNS服务时(大多数集群都在运行),此方法有效-请参见此link,尤其是A records部分。type: ClusterIP
服务为要调用的应用(ProductWebApp)定义here所述的服务;配置服务名称为要调用的URI的调用应用(DashboardWebApp)。staging
的命名空间中,请为ProductWebApp部署定义名为product-app
的服务,然后将DashboardWebApp配置为在此URI上调用ProductWebApp:http://product-app.staging.svc.cluster.local/end/point/as/needed
答案 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* }}