获取ALB Ingress日志提示selector for *v1.Ingress未实现报错如何解决
报错原因
kubectl logs 命令仅支持查询Kubernetes集群内部运行的Pod资源的标准输出/标准错误日志,而Ingress是Kubernetes的API配置资源,本身不是运行的Pod实例,因此原生不支持通过kubectl logs直接获取日志,你遇到的报错就是Kubernetes API明确提示Ingress资源类型未实现日志查询的选择器逻辑。
另外你使用的是AWS ALB Ingress方案,对应的ALB负载均衡是AWS云服务托管的资源,并不运行在你的Kubernetes集群内部,集群侧也无法直接获取云服务托管资源的日志。
解决方案
根据你要查询的日志类型,分两类场景处理:
若需要排查ALB Ingress控制器的配置同步问题,查询控制器本身的运行日志:
- 先找到控制器运行的Pod,默认部署在
kube-system命名空间,Pod名前缀一般为aws-load-balancer-controller:kubectl get pods -n kube-system | grep aws-load-balancer-controller - 执行日志查询命令,替换为你查到的Pod名即可:
kubectl logs -f <aws-load-balancer-controller-pod名称> -n kube-system
- 先找到控制器运行的Pod,默认部署在
若需要查询ALB自身的访问日志、请求错误日志:
这类日志由AWS云服务侧托管,需要先配置开启ALB日志投递到S3存储桶,操作方式如下:- 提前创建S3存储桶,并配置桶策略允许ALB服务写入日志
- 在你的Ingress资源的annotations中增加以下配置,开启日志投递:
alb.ingress.kubernetes.io/access-log-s3-bucket: "你的S3桶名称" alb.ingress.kubernetes.io/access-log-s3-prefix: "tekton-alb-logs/" # 可选配置,自定义日志存储前缀 - 重新apply更新Ingress资源后,AWS会自动将ALB的所有访问日志按小时粒度投递到指定的S3路径,你可以直接在S3控制台下载日志,或者用Athena等工具进行批量查询。
内容的提问来源于stack exchange,提问作者Anadi Misra
相关产品推荐
相关产品推荐

