【发布时间】:2021-09-12 10:37:17
【问题描述】:
我有一个 alb 入口控制器,我不想允许从外部访问某些路径。安装在内部监控服务的执行器之类的示例路径。
我看到每个入口规则路由请求都在后台服务。如何从 ingress 本身返回 403?
【问题讨论】:
标签: kubernetes kubernetes-ingress amazon-eks
我有一个 alb 入口控制器,我不想允许从外部访问某些路径。安装在内部监控服务的执行器之类的示例路径。
我看到每个入口规则路由请求都在后台服务。如何从 ingress 本身返回 403?
【问题讨论】:
标签: kubernetes kubernetes-ingress amazon-eks
这可以通过使用注解来实现。
例如如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig":
{ "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
alb.ingress.kubernetes.io/group.name: my-example-com-alb
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/security-groups: my-security-group
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/ssl-policy : "ELBSecurityPolicy-TLS-1-2-Ext-2018-06"
external-dns.alpha.kubernetes.io/hostname: myhost.example.com
alb.ingress.kubernetes.io/healthcheck-path: "/mycustomhealthpath/"
alb.ingress.kubernetes.io/healthcheck-protocol: "HTTP"
alb.ingress.kubernetes.io/healthcheck-interval-seconds: "15"
alb.ingress.kubernetes.io/healthcheck-port: "http"
alb.ingress.kubernetes.io/unhealthy-threshold-count: "3"
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/actions.response-403: >
{"type":"fixed-response","fixedResponseConfig":{"contentType":"text/plain","statusCode":"403","messageBody":"403 External access to endpoint not allowed"}}
name: login
spec:
rules:
- host: myhost.example.com
http:
paths:
- path: /block/access/to/this/path
backend:
serviceName: response-403
servicePort: use-annotation
- backend:
serviceName: ssl-redirect
servicePort: use-annotation
path: /
pathType: ImplementationSpecific
- backend:
serviceName: myapp
servicePort: http
path: /
pathType: Prefix
tls:
- hosts:
- myhost.example.com
请注意,在此示例中,URI 和 URL 是虚构的。
在本例中,Kubernetes 入口清单的apiVersion 使用extentions/v1beta1 API 组;该示例可以适应稳定的 API 组,约定不会改变。
最后但并非最不重要的一点是,我没有检查支持此约定的入口控制器的最低版本是什么。在这个例子中,我依赖于 2.2 版本。
【讨论】: