kubernetes - 如何查看哪个节点/pod 为 Kubernetes Ingress 请求提供服务?
问题描述
我有一个包含三个副本的部署,每个人都从不同的节点开始,作为入口。对于测试和故障排除,我想查看哪个 pod/node 满足了我的请求。这怎么可能?
我知道的唯一方法是打开所有 pod 上的日志,执行我的请求并在访问日志中搜索有我请求的 pod。但这很复杂,而且会减少错误,尤其是在有其他用户请求的生产应用程序上。
我正在寻找像这样的 HTTP 响应标头之类的东西:
X-Kubernetes-Pod: mypod-abcdef-23874
X-Kubernetes-Node: kubw02
解决方案
AFAIK,没有开箱即用的功能。
我能想到的最简单的方法是自己从 API 中将这些信息添加为标头。
从技术上讲,您必须通过环境变量向容器公开 Pod 信息并从代码中获取它以将标头添加到响应中。
会是这样的:
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 获取信息并插入到标题中。
推荐阅读
- html - 如何在 Blogger 网站的页脚中创建一组水平社交媒体链接
- django - Django:提交表单时,自动填写一个字段
- c# - 无法将文本框文本转换为列表 - WPF
- c# - 在 C# 中使用 LINQ 压缩多个列表是否有更紧凑/更好的方法?
- python - 如何合并 AWS Comprehend batch_detect_key_phrases() ResultList 和 ErrorList
- swift - NSCollectionView、NSCollectionViewItem 和 MVC
- git - git rebase 如何消除先前已合并到 master 上的提交?
- flutter - 为什么我们要添加同一系列字体文件的不同版本,例如(浅色、粗体、黑色或斜体...)?
- ios - 如何解决 UIBarButtomItem 的色调问题?
- angular - 是否可以将类型传递给可以“新建”的 Angular 组件?