kubernetes 在容器中获取端点
kubernetes get endpint in the containers
在 kubernetes vm Im 运行ning 上,例如:kubectl get endpoints
我怎样才能在 pod 中获得相同的输出,我应该在 pod 中 运行 什么?
我知道有一个 kubeapi,但我是 kubernetes 的新手,有人可以解释一下我该如何使用它吗
这是我的集群角色绑定:
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: {{ template "elasticsearch.fullname" . }}
labels:
app: {{ template "elasticsearch.name" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
subjects:
- kind: ServiceAccount
name: {{ template "elasticsearch.serviceAccountName.client" . }}
namespace: {{ .Release.Namespace }}
roleRef:
kind: ClusterRole
name: {{ template "elasticsearch.fullname" . }}
apiGroup: rbac.authorization.k8s.io
clusterrole.yaml:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: {{ template "elasticsearch.fullname" . }}
labels:
app: {{ template "elasticsearch.name" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
rules:
#
# Give here only the privileges you need
#
- apiGroups: [""]
resources:
- pods
- endpoints
verbs:
- get
- watch
- list
服务帐户:
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: {{ template "elasticsearch.name" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
component: "{{ .Values.client.name }}"
heritage: {{ .Release.Service }}
release: {{ .Release.Name }}
name: {{ template "elasticsearch.client.fullname" . }}
您不必在 pod 中安装 kubectl
即可访问 Kubernetes API。您将能够使用任何可以发出 HTTP 请求的工具来完成此操作。
Kubernetes API 是一个简单的 HTTP REST API,如果容器在集群中作为 Pod 运行,则您需要的所有身份验证信息都存在。
要从集群中的容器中名为 your-service
的 get the Endpoints object,您可以执行以下操作:
$ curl -k -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
https://kubernetes.default.svc:443/api/v1/namespaces/{namespace}/endpoints/your-service
将 {namespace}
替换为 your-service
端点的命名空间 resource._
提取返回的 IP 地址 JSON 将输出通过管道传输到 jq
:
这样的工具
... | jq -r '.subsets[].addresses[].ip'
重要提示:
您执行此操作的 Pod 需要 Endpoints 资源的读取权限,否则 API 请求将被拒绝。
您可以通过创建 ClusterRole、ClusterRoleBinding 和服务帐户来完成此操作 - 设置一次:
$ kubectl create sa endpoint-reader-sa
$ kubectl create clusterrole endpoint-reader-cr --verb=get,list --resource=endpoints
$ kubectl create clusterrolebinding endpoint-reader-crb --serviceaccount=default:endpoint-reader-sa --clusterrole=endpoint-reader-cr
接下来使用创建的 ServiceAccount - endpoint-reader-sa
用于要从中执行上述 curl
命令的 Pod,方法是在 pod.spec.serviceAccountName
字段中指定它。
为任何不同的 API 操作授予权限的方式相同。
来源:.
@ITChap 也提到了类似的答案:。
在 kubernetes vm Im 运行ning 上,例如:kubectl get endpoints
我怎样才能在 pod 中获得相同的输出,我应该在 pod 中 运行 什么?
我知道有一个 kubeapi,但我是 kubernetes 的新手,有人可以解释一下我该如何使用它吗
这是我的集群角色绑定:
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: {{ template "elasticsearch.fullname" . }}
labels:
app: {{ template "elasticsearch.name" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
subjects:
- kind: ServiceAccount
name: {{ template "elasticsearch.serviceAccountName.client" . }}
namespace: {{ .Release.Namespace }}
roleRef:
kind: ClusterRole
name: {{ template "elasticsearch.fullname" . }}
apiGroup: rbac.authorization.k8s.io
clusterrole.yaml:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: {{ template "elasticsearch.fullname" . }}
labels:
app: {{ template "elasticsearch.name" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
rules:
#
# Give here only the privileges you need
#
- apiGroups: [""]
resources:
- pods
- endpoints
verbs:
- get
- watch
- list
服务帐户:
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: {{ template "elasticsearch.name" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
component: "{{ .Values.client.name }}"
heritage: {{ .Release.Service }}
release: {{ .Release.Name }}
name: {{ template "elasticsearch.client.fullname" . }}
您不必在 pod 中安装 kubectl
即可访问 Kubernetes API。您将能够使用任何可以发出 HTTP 请求的工具来完成此操作。
Kubernetes API 是一个简单的 HTTP REST API,如果容器在集群中作为 Pod 运行,则您需要的所有身份验证信息都存在。
要从集群中的容器中名为 your-service
的 get the Endpoints object,您可以执行以下操作:
$ curl -k -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
https://kubernetes.default.svc:443/api/v1/namespaces/{namespace}/endpoints/your-service
将 {namespace}
替换为 your-service
端点的命名空间 resource._
提取返回的 IP 地址 JSON 将输出通过管道传输到 jq
:
... | jq -r '.subsets[].addresses[].ip'
重要提示: 您执行此操作的 Pod 需要 Endpoints 资源的读取权限,否则 API 请求将被拒绝。
您可以通过创建 ClusterRole、ClusterRoleBinding 和服务帐户来完成此操作 - 设置一次:
$ kubectl create sa endpoint-reader-sa
$ kubectl create clusterrole endpoint-reader-cr --verb=get,list --resource=endpoints
$ kubectl create clusterrolebinding endpoint-reader-crb --serviceaccount=default:endpoint-reader-sa --clusterrole=endpoint-reader-cr
接下来使用创建的 ServiceAccount - endpoint-reader-sa
用于要从中执行上述 curl
命令的 Pod,方法是在 pod.spec.serviceAccountName
字段中指定它。
为任何不同的 API 操作授予权限的方式相同。
来源:
@ITChap 也提到了类似的答案: