通过Nginx Ingress暴露Kubernetes内Elastic APM服务返回404问题求助
问题原因
Elastic APM Server原生不支持自定义上下文路径,默认只能处理根路径/下的请求。你当前的Ingress配置会将完整的/apm路径透传给APM Server,服务端识别不到该路径所以返回404错误。
解决方案
方案1:配置Ingress路径重写(保留/apm前缀访问)
给你的Ingress资源添加Nginx重写注解,转发请求时自动去掉/apm前缀,修改后的Ingress配置如下:
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: namespace: elastic name: gateway-ingress-apm annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: rules: - host: my.domain.com http: paths: - path: /apm(/|$)(.*) backend: serviceName: apm-server servicePort: 8200
配置生效后即可通过https://my.domain.com/apm正常访问APM Server,配置APM Agent上报地址时也直接填写该带前缀的地址即可。
方案2:使用独立子域名(更稳定)
如果不需要复用域名的路径前缀,可以直接给APM Server分配独立子域名,无需路径重写,配置更简单、兼容性更好:
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: namespace: elastic name: gateway-ingress-apm annotations: kubernetes.io/ingress.class: nginx spec: rules: - host: apm.my.domain.com http: paths: - path: / backend: serviceName: apm-server servicePort: 8200
配置完成后直接通过https://apm.my.domain.com访问即可。
内容的提问来源于stack exchange,提问作者Prerak Tiwari
相关产品推荐
相关产品推荐

