创建ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: argo-rollouts
name: argo-rollout-ingress
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/backend-protocol: HTTP
alb.ingress.kubernetes.io/group.name: my-team.awesome-group
alb.ingress.kubernetes.io/group.order: '10'
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/success-codes: '200'
alb.ingress.kubernetes.io/healthcheck-path: /rollouts
alb.ingress.kubernetes.io/healthcheck-protocol: HTTP
alb.ingress.kubernetes.io/certificate-arn: '去aws证书管理那边复制你的相关证书信息'
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
spec:
rules:
- host: argo-rollout-intl.lavamusic.com
http:
paths:
- path: /*
backend:
service:
name: argo-rollouts-dashboard
port:
number: 3100
pathType: ImplementationSpecific
这是一个 Kubernetes 中的 Ingress 配置文件,用于将外部的 HTTP/HTTPS 请求导入到集群内部的服务中。
metadata 中包含了该 Ingress 对象的元数据信息,如命名空间、名称和注释等。 annotations 中定义了该 Ingress 对象的一些额外属性,如使用的负载均衡器、证书信息、监听端口等。
spec 中定义了该 Ingress 对象的具体配置信息: rules 下定义了针对哪个域名(host)的请求会被处理,并且指定了该域名下的路径(path)对应的后端服务。 backend 中定义了后端服务的相关信息,包括名称、端口号等。
具体来说,这个配置文件中的注释和属性含义如下:
- kubernetes.io/ingress.class: 指定了使用的负载均衡器类型,这里使用了 AWS 的 Application Load Balancer (ALB)。
- alb.ingress.kubernetes.io/backend-protocol: 指定了后端服务的协议类型,这里使用了 HTTPS 协议。
- alb.ingress.kubernetes.io/group.name: 用于在同一组中将Ingress资源分组。这个参数是Amazon EKS和其他Kubernetes发行版中使用的AWS Load Balancer Controller的一部分。通过设置不同的group name,您可以创建具有不同路由规则和后端服务的多个应用程序,同时确保它们仍属于同一个组并且与同一个Load Balancer关联。
- alb.ingress.kubernetes.io/group.order: 指定 IngressGroup 中所有 Ingress 的顺序。
- 您可以使用 -1000 到 1000 之间的数字明确表示顺序
- 顺序越小,规则将首先被评估。没有明确顺序设置的所有 Ingresses 都将顺序值为 0
- 具有相同顺序的规则按 Ingress 的名称空间/名称的字典顺序排序。
- alb.ingress.kubernetes.io/scheme: 指定了访问负载均衡器的协议类型,这里使用了 Internet-facing 方式。
- alb.ingress.kubernetes.io/target-type: 指定了 ALB 匹配后端服务的方式。这里设置为 IP,表示匹配后端服务的目标 IP 地址。
- alb.ingress.kubernetes.io/success-codes: 指定了 HTTP 请求成功的状态码,这里设为 200。
- alb.ingress.kubernetes.io/healthcheck-path: 指定了负载均衡器进行健康检查时请求的路径。
- alb.ingress.kubernetes.io/healthcheck-protocol: 指定了进行健康检查时使用的协议类型,这里使用了 HTTPS 协议。
- alb.ingress.kubernetes.io/certificate-arn: 指定了该 Ingress 对象使用的 SSL 证书在 AWS 上的 ARN(Amazon Resource Name)地址。
- alb.ingress.kubernetes.io/listen-ports: 指定了 ALB 监听的端口号和协议类型。这里监听了 HTTP 端口号 80 和 HTTPS 端口号 443。
- alb.ingress.kubernetes.io/actions.ssl-redirect: 定义了一个名为 "ssl-redirect" 的 ALB 行为。当请求使用 HTTP 协议访问时,该行为会将请求重定向到 HTTPS 协议。
pathType: ImplementationSpecific
意味着路径类型会根据使用的 Kubernetes 集群的不同而具有不同的实现。这个属性定义了 Ingress 中 path
字段的匹配方式,它可以设置为三种值:Exact
, Prefix
或 ImplementationSpecific
。
Exact
表示请求的路径必须与配置的路径完全匹配;Prefix
表示请求的路径必须以配置的路径为前缀;ImplementationSpecific
表示路径匹配方式由集群的实现决定。
当设置为 ImplementationSpecific
时,Kubernetes 将根据底层网络设施和 Ingress 控制器的实现来确定路径的匹配方式。具体来说,Ingress 控制器可以选择使用 Exact
、Prefix
或其他匹配方式来匹配请求的路径。
因此,当您在编写 Ingress 对象时将 pathType
设置为 ImplementationSpecific
,需要确保您的 Ingress 控制器支持该选项,并且理解其匹配行为是由控制器实现决定的。
可参考:
https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.4/guide/ingress/annotations/