如何查看哪个 node/pod 处理了 Kubernetes Ingress 请求?
How to see which node/pod served a Kubernetes Ingress request?
我有一个包含三个副本的 Deployment,每个人都在不同的节点上启动,作为一个入口。对于测试和故障排除,我想查看哪个 pod/node 满足了我的请求。这怎么可能?
我知道的唯一方法是打开所有 pods 上的日志,执行我的请求并在访问日志中搜索包含我的请求的 pod。但这很复杂并且会错误修剪,特别是在有其他用户请求的生产应用程序上。
我正在寻找类似 HTTP 响应的内容 header,如下所示:
X-Kubernetes-Pod: mypod-abcdef-23874
X-Kubernetes-Node: kubw02
据我所知,没有开箱即用的功能。
我能想到的最简单的方法是从 API.
中自己将这些信息添加为 header
从技术上讲,您必须 Expose Pod Information to Containers Through Environment Variables 并从代码中获取它以将 header 添加到响应中。
会是这样的:
apiVersion: v1
kind: Pod
metadata:
name: dapi-envars-fieldref
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "sh", "-c"]
args:
- while true; do
echo -en '\n';
printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
sleep 10;
done;
env:
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: MY_POD_SERVICE_ACCOUNT
valueFrom:
fieldRef:
fieldPath: spec.serviceAccountName
restartPolicy: Never
然后从 API 获取信息并插入 header。
我有一个包含三个副本的 Deployment,每个人都在不同的节点上启动,作为一个入口。对于测试和故障排除,我想查看哪个 pod/node 满足了我的请求。这怎么可能?
我知道的唯一方法是打开所有 pods 上的日志,执行我的请求并在访问日志中搜索包含我的请求的 pod。但这很复杂并且会错误修剪,特别是在有其他用户请求的生产应用程序上。
我正在寻找类似 HTTP 响应的内容 header,如下所示:
X-Kubernetes-Pod: mypod-abcdef-23874
X-Kubernetes-Node: kubw02
据我所知,没有开箱即用的功能。
我能想到的最简单的方法是从 API.
中自己将这些信息添加为 header从技术上讲,您必须 Expose Pod Information to Containers Through Environment Variables 并从代码中获取它以将 header 添加到响应中。
会是这样的:
apiVersion: v1
kind: Pod
metadata:
name: dapi-envars-fieldref
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "sh", "-c"]
args:
- while true; do
echo -en '\n';
printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
sleep 10;
done;
env:
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: MY_POD_SERVICE_ACCOUNT
valueFrom:
fieldRef:
fieldPath: spec.serviceAccountName
restartPolicy: Never
然后从 API 获取信息并插入 header。