EKS Ingress ALB 为某些服务添加 HTTP 侦听器,为其他服务添加 HTTPS
EKS Ingress ALB add HTTP listener for some services and HTTPS for others
我有以下 ingress.yaml 文件
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: in
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=600
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/certificate-arn: xxxx
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
spec:
rules:
- http:
paths:
- path: /api/bulk-api/*
backend:
serviceName: dg-bulk-api
servicePort: 5000
- path: /api/adjuster-selection
backend:
serviceName: dg-adjuster-selection
servicePort: 5050
- path: /api/cockpit/*
backend:
serviceName: dg-cockpit
servicePort: 5050
- path: /api/regression/*
backend:
serviceName: dg-regression
servicePort: 5005
- path: /api/lp/task-details*
backend:
serviceName: lp-task-detail
servicePort: 5050
- path: /api/tool-setup/*
backend:
serviceName: dg-tool-setup
servicePort: 5000
- path: /api/guideline/*
backend:
serviceName: dg-guideline
servicePort: 5050
- path: /*
backend:
serviceName: dg-ui
servicePort: 80
上面提到的 yaml 创建了一个 ALB,并为所有路由添加了 80 和 443 的侦听器。但是,我希望监听 80 用于除 dg-ui 服务之外的所有路由,而 443 仅用于 dg-ui 服务。让我知道如何做到这一点。
如果您想确保某些网址仅使用 https 或 http,您需要为 http 定义 ingress.kubernetes.io/ssl-redirect: "true"
注释或仅使用 http 定义 ingress.kubernetes.io/ssl-redirect: "false"
。事实上,声明的注释会影响您在入口对象中定义的整个路径,这就是为什么您需要像下面的示例那样分离入口定义。因此,对于 http,您需要像下面那样使用 yaml;
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: https-ingress
annotations:
ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- example.com
secretName: tls-secret
rules:
- host: example.com
http:
paths:
- path: /secured
backend:
serviceName: my-service
servicePort: 8080
对于 http 你需要像下面的 yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: http-ingress
annotations:
ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: example.com
http:
paths:
- path: /unsecured
backend:
serviceName: my-service
servicePort: 8080
我已经解决了这个问题。觉得对大家有帮助。
- 已将我的 ALB Ingress Controller 更新到 v2.1。说明可在以下位置找到:AWS LoadBalancer Controller
- 为 Http 和 Https 侦听器规则创建单独的 Ingress Yaml。
- 添加注释:
alb.ingress.kubernetes.io/group.name: my-team.awesome-group
到两个 Ingress。这将创建 2 个入口并将规则附加到 1 个公共 ALB。可以在此处找到有关此注释的更多信息:IngressGroups
我有以下 ingress.yaml 文件
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: in
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=600
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/certificate-arn: xxxx
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
spec:
rules:
- http:
paths:
- path: /api/bulk-api/*
backend:
serviceName: dg-bulk-api
servicePort: 5000
- path: /api/adjuster-selection
backend:
serviceName: dg-adjuster-selection
servicePort: 5050
- path: /api/cockpit/*
backend:
serviceName: dg-cockpit
servicePort: 5050
- path: /api/regression/*
backend:
serviceName: dg-regression
servicePort: 5005
- path: /api/lp/task-details*
backend:
serviceName: lp-task-detail
servicePort: 5050
- path: /api/tool-setup/*
backend:
serviceName: dg-tool-setup
servicePort: 5000
- path: /api/guideline/*
backend:
serviceName: dg-guideline
servicePort: 5050
- path: /*
backend:
serviceName: dg-ui
servicePort: 80
上面提到的 yaml 创建了一个 ALB,并为所有路由添加了 80 和 443 的侦听器。但是,我希望监听 80 用于除 dg-ui 服务之外的所有路由,而 443 仅用于 dg-ui 服务。让我知道如何做到这一点。
如果您想确保某些网址仅使用 https 或 http,您需要为 http 定义 ingress.kubernetes.io/ssl-redirect: "true"
注释或仅使用 http 定义 ingress.kubernetes.io/ssl-redirect: "false"
。事实上,声明的注释会影响您在入口对象中定义的整个路径,这就是为什么您需要像下面的示例那样分离入口定义。因此,对于 http,您需要像下面那样使用 yaml;
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: https-ingress
annotations:
ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- example.com
secretName: tls-secret
rules:
- host: example.com
http:
paths:
- path: /secured
backend:
serviceName: my-service
servicePort: 8080
对于 http 你需要像下面的 yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: http-ingress
annotations:
ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: example.com
http:
paths:
- path: /unsecured
backend:
serviceName: my-service
servicePort: 8080
我已经解决了这个问题。觉得对大家有帮助。
- 已将我的 ALB Ingress Controller 更新到 v2.1。说明可在以下位置找到:AWS LoadBalancer Controller
- 为 Http 和 Https 侦听器规则创建单独的 Ingress Yaml。
- 添加注释:
alb.ingress.kubernetes.io/group.name: my-team.awesome-group
到两个 Ingress。这将创建 2 个入口并将规则附加到 1 个公共 ALB。可以在此处找到有关此注释的更多信息:IngressGroups