kubernetes在容器中得到endpint



在kubernetes虚拟机上运行,例如:kubectl get endpoints如何在pod中得到相同的输出,我应该在pod中运行什么?我知道有一个kubeapi,但我不熟悉kubernetes,有人能解释一下我怎么使用它吗?

这是我的clusterrolebinding:

---
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

serviceaccount:

---
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的端点对象,可以执行以下操作:

$ 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-serviceEndpoints资源的命名空间_

要提取返回的JSON的IP地址,将输出管道到jq等工具:

... | jq -r '.subsets[].addresses[].ip'

重要:执行此操作的Pod需要端点资源的读权限,否则API请求将被拒绝。

您可以通过创建一个ClusterRole, ClusterRoleBinding和Service Account来实现这一点-设置一次:

$ 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

接下来,通过在pod.spec.serviceAccountName字段中指定要执行上述curl命令的Pod,使用created ServiceAccount -endpoint-reader-sa

为任何不同的API操作授予权限的工作方式相同。

来源:get-pod-ip。

@ITChap也提到了类似的答案:kubectl-from-inside-the-pod

相关内容

  • 没有找到相关文章

最新更新