我可以为 Istio 预置的经典 AWS ELB 定义子域吗?

2024-03-19

我将 Istio 部署在 AWS EKS 托管的 Kubernetes 集群中。这创建了一个名为 istio-ingressgateway 的 LoadBalancer 类型的 Kubernetes 服务,其外部主机名为[redacted]-redacted.us-west-2.elb.amazonaws.com,并自动配置 AWS ELB,类型 classic。那太棒了。 (注意:在 AWS 控制台中,我没有看到此 elb 主机名的托管区域,看起来我无法配置别名或其他内容)

我已经能够通过定义打开端口 80 的 istio 网关,将在集群外部运行的 gRPC 客户端连接到在集群中运行的 gRPC 服务器。host:"*",并定义一个 istio 虚拟服务,将端口 80 路由到我的目的地(某些 kubernetes 服务的某个端口)。到目前为止,一切都很好。

现在我想对集群中的第二个 gRPC 端点执行此操作。据我所知,我的选择是:要么通过在入口上打开第二个端口(例如 81)(我现在选择不这样做)。或者通过定义子域来路由[redacted]-redacted.us-west-2.elb.amazonaws.com,或通过实现“虚拟托管”进行路由,即客户端发送的同一域上的两个服务host:"svc1"在标题中。

这就是我被困住的地方。我不知道如何为这个 ELB 域名定义子域,也不知道是否可以使用 TLS 进行虚拟托管,如果可以,我是否仍然可以使用 Istio 的“passthrough”tls 模式,以免TLS 在网关上终止。

1-使用子域:当在我的开发机器上时,我尝试getent hosts svc1.[redacted]-redacted.us-west-2.elb.amazonaws.com它不映射到 IP,而如果删除svc1前缀 DNS 返回 3 个 IP(猜测 us-west-2 中的 3 个可用区域)。因此,如果不做一些工作,我就无法将 svc1 添加到域中。

我可以定义子域吗svc1 and svc2对于通过部署 Istio 自动配置的经典 AWS ELB 创建的域,如果是这样,如何实现?我可以这样做吗kubectl/istioctl配置 Istio,还是需要使用 AWS CLI 来执行此操作?可以在不注册域的情况下完成此操作吗?我可以接受用户不友好的 elb.amazonaws.com 主机名吗?

2- 虚拟主机:或者,我可以在 gRPC 元数据中添加 host=svc1。我尝试添加ctx := metadata.AppendToOutgoingContext(context.Background(), "Host", "svc1")对于我的 Go 客户端来说,这不起作用。

一些指导会很棒。

更新 1,以及一种明文解决方案我正在读HTTP 标头字段列表 https://en.wikipedia.org/wiki/List_of_HTTP_header_fields“Host”标头不应在 HTTP2 中使用。鉴于这是 gRPC,它是 HTTP2,因此我不应该将其添加为我的 gRPC 客户端请求中的自定义标头。进行虚拟托管时的解决方案,在 gRPC 客户端中,不发送“host”标头,而是发送“:Authority”标头,该值必须对应于 istio 的 gateway+virtualservice 中指定的主机。这对我有用。在我的 Go 客户端中我必须添加dialOptions = append(dialOptions, grpc.WithAuthority("[my-service-1]")).

根据该解决方案不适用于 TLSGoDoc grpc.WithAuthority https://godoc.org/google.golang.org/grpc#WithAuthority。所以我仍然需要找到如何在使用 TLS 时从相同的外部 IP 和端口路由 2 个服务。

更新1.1:在虚拟主机中,当使用 TLS 时,SNI 可以在 CLIENT HELLO 消息中传递,而不是像纯文本那样作为 gRPC 标头。根据您的语言,确切的 API 会有所不同,但在 Go 中,我可以通过设置来传递主机名ServerName领域在tls配置 https://golang.org/pkg/crypto/tls/#Config。然后,您可以在 istio 网关配置中访问该主机名,并根据 istio 虚拟服务中的该值进行路由。

更新2:我尝试在 AWS Route53 上创建子域,但失败了。首先,我为域创建一个公共托管区域:[redacted]-redacted.us-west-2.elb.amazonaws.com。接下来,在该托管区域中,我创建一条 A 记录,名称=svc1.[redacted]-redacted.us-west-2.elb.amazonaws.com,route=Classic Load Balancer 的别名,region=us-west-2,负载均衡器=dualstack。[redacted]-redacted.us-west-2 .elb.amazonaws.com。

我稍后测试 svc1.[redacted]-redacted.us-west-2.elb.amazonaws.com 存在一条记录dig,它不返回答案。但是,dig 确实返回了 [redacted]-redacted.us-west-2.elb.amazonaws.com(不带 svc1 前缀)的 3 个 A 记录,其中包含 3 个负载均衡器的 IP。


Istio

我可以为通过部署 Istio 自动配置的经典 AWS ELB 创建的域定义子域 svc1 和 svc2 吗?如果可以,如何定义?

你不能使用 istio 来做到这一点,你必须在云中配置它,在你的情况下,你必须在 aws 上配置它。

在 istio 上,您只能指定主机,这将是在 aws 上配置的子域。

虚拟服务看起来像这样:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mipnw-vs1
spec:
  hosts:
  - svc1.example.com
  http:
  - name: "svc1-route"
    match:
    - uri:
        prefix: /
    route:
    - destination:
        host: svc1.default.svc.cluster.local

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mipnw-vs2
spec:
  hosts:
  - svc2.example.com
  http:
  - name: "svc2-route"
    match:
    - uri:
        prefix: /
    route:
    - destination:
        host: svc2.default.svc.cluster.local

Aws

我很想了解如何为域“[redacted]-[redacted].us-west-2.elb.amazonaws.com”创建 2 个子域“abc”和“def”

我不太确定这就是你要找的东西,但我在 aws 文档中做了一些研究,发现你可以使用亚马逊 53 号公路 https://aws.amazon.com/route53/来实现你所需要的。

Amazon Route 53 是一项高度可用且可扩展的云域名系统 (DNS) Web 服务。它旨在为开发人员和企业提供一种极其可靠且具有成本效益的方式,通过翻译以下名称将最终用户路由到互联网应用程序:www.example.com http://www.example.com输入数字 IP 地址,如 192.0.2.1

以下信息收集自:

  • https://aws.amazon.com/route53/faqs/ https://aws.amazon.com/route53/faqs/
  • https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-elb-load-balancer.html https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-elb-load-balancer.html

如果您在多个 Amazon EC2 实例上托管网站,您可以使用弹性负载平衡 (ELB) 负载均衡器。当您网站的流量随时间变化时,ELB 服务会自动扩展负载均衡器。负载均衡器还可以监控其注册实例的运行状况,并将域流量仅路由到运行状况良好的实例。

将域流量路由到ELB负载均衡r, use 亚马逊 53 号公路创建指向您的负载均衡器的别名记录。别名记录是路由 53 扩展至 DNS。它与 CNAME 记录类似,但您可以为根域(例如 example.com)和子域(例如 www.example.com)创建别名记录。(您只能为子域创建 CNAME 记录。)

Amazon Route 53 还提供别名记录,这是 Amazon Route 53 特定的 DNS 扩展。您可以创建别名记录以将流量路由到选定的 AWS 资源,包括Amazon Elastic Load Balancing 负载均衡器、Amazon CloudFront 发行版、AWS Elastic Beanstalk 环境、API 网关、VPC 接口终端节点以及配置为网站的 Amazon S3 存储桶。别名记录通常具有 A 或 AAAA 类型,但它们的工作方式类似于 CNAME 记录。使用别名记录,您可以将记录名称 (example.com) 映射到 AWS 资源的 DNS 名称 (elb1234.elb.amazonaws.com)。解析程序可以查看 A 或 AAAA 记录以及 AWS 资源的 IP 地址。

还有关于子域的问题

我可以在我的子域中使用“别名”记录吗?

是的。您还可以使用别名记录来映射您的子域(www.example.com http://www.example.com、pictures.example.com 等)到您的ELB负载均衡器、CloudFront 发行版或 S3 网站存储桶。

其他资源:

  • https://medium.com/cloud-native-the-gathering/istio-ingress-to-expose-your-k8s-services-via-individual-dns-2ec9c2717b81 https://medium.com/cloud-native-the-gathering/istio-ingress-to-expose-your-k8s-services-via-individual-dns-2ec9c2717b81
  • https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-routing-traffic-for-subdomains.html https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-routing-traffic-for-subdomains.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以为 Istio 预置的经典 AWS ELB 定义子域吗? 的相关文章

随机推荐

  • Jena PrefixMapping:当模型是从数据集中获取的命名模型时,基本命名空间缺失

    这是我用来加载的代码OntModel to a Dataset作为命名模型 然后我尝试检索PrefixMapping以两种不同的方式实现相同的目的 public static void loadDatasetwithNamedModels
  • 获取“exec”调用中最后一个表达式的值

    假设我在字符串中有一些 python 代码 code a 42 a and I exec那串代码 result exec code Then result一直会None 有没有办法获得最后一个表达式的值 在这种情况下 那就是5 since
  • VueJS 读取 Dom 属性

    我想获取按钮单击事件的 href 属性 a href user all 2 i class fa fa edit i span Get Data span a 主要 JS 文件 new Vue el body methods func fu
  • 实体框架 4 存储过程调用超时

    我有一个导入到 EF4 中的存储过程 当我在 30 秒后使用某些参数调用它时 它会抛出超时错误 在 SQL Server Profiler 中 我可以看到使用正确参数的存储过程调用仅花费了 30 秒多一点 这是我的应用程序的超时时间 然而
  • Spring MVC:当未指定内容类型时@RequestBody

    我有一个 Spring MVC 应用程序 它以 JSON 字符串的形式从外部系统接收 HTTP 请求 其响应的返回方式与 JSON 字符串类似 我的控制器正确注释为 RequestBody and ResponseBody我有集成测试 它实
  • 连接 Spark 数据帧时相当于 pandas merge_asof,具有合并最近和容差

    我正在尝试复制熊猫merge asof https pandas pydata org pandas docs version 0 25 0 reference api pandas merge asof html加入 Spark 数据帧时
  • 如何在闪亮模块的数据表中添加复选框?

    我有一个闪亮的模块 它显示一个带有评论列的表格 用户可以在客户端输入文本 然后评论将存储在数据库中 现在 我想添加另一列带有复选框并将其相应的值 TRUE FALSE 存储在数据库中 不确定如何从表中检索复选框值 以下是我对示例数据的尝试
  • 什么是 SDL_Surface? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在关注lazyfoo的教程http lazyfoo net tutorials SDL 01 hello SDL index2 php
  • ASP.NET MVC 4 货币字段

    我的网页上的货币字段出现错误 字段金额必须是数字 这是因为美元符号 50 00 DataType DataType Currency DisplayFormat DataFormatString 0 c ApplyFormatInEditM
  • 如何“切换到 Agg 后端之一”?

    我有同样的问题这个问题 https stackoverflow com questions 25865975 pylab networkx no node labels displayed after update 25870916 即在M
  • 在 XCODE 中简单调整 UIImage 的大小

    有什么办法可以用尽可能少的行来调整 UIImage 的大小吗 我不介意比例 我只想将图像分辨率设置为 80x60 就这样 这可能有点过分了 但是 您可以简单地获取图像 并以您想要的分辨率创建图形上下文 然后您可以将 tempImage 设置
  • 无法设置 Application 类的 DisplayAlerts 属性

    I am intermittently getting the following exception 如果我单步执行代码并且无法确定如何可靠地重现它 则不会发生这种情况 内部异常为空 我在网上搜索并发现一个 C MFC 程序员遇到了同样的
  • 在 Plotly 中配置添加到 3d 散点图的回归平面

    我使用plotly创建了一个3D散点图 并将回归平面建模为数据的子集 最后将其添加到所有点以实现更好的可视化 如何更改添加的回归平面的色阶 使其 i 无 只有黑色平面 或 ii 显示模型在空间中给定点的标准误差 I had a datase
  • 在 Linq toEntity 中将 int 转换为字符串时出现问题

    var items from c in contacts select new ListItem Value c ContactId Cannot implicitly convert type int ContactId to strin
  • numpy.unique 的 2D 等效项[重复]

    这个问题在这里已经有答案了 我有一组 Nx2 离散坐标numpy ndarray 我想获取每个独特坐标集的计数和索引 numpy unique http docs scipy org doc numpy reference generate
  • 获取控件上的单击点

    我在我的 C Win 应用程序中使用旧的 ActiveX 控件 它有一个 MouseUp 事件 其 eventArgs 正在传递我们单击的点的 X 和 Y 但对于我的场景 我使用其 ItemClick 事件 并且其 eventArgs 没有
  • 提取元素并插入空格

    我在 python 中使用 BeautifulSoup 解析 html 我不知道如何在提取文本元素时插入空格 这是代码 import BeautifulSoup soup BeautifulSoup BeautifulSoup this b
  • c3p0 ResultSet.unwrap 抛出 AbstractMethodError

    我有一个 ResultSet 对象 需要将其转换为 OracleResultSet 以便我可以对其调用 getOPAQUE String 方法 我使用 c3p0 作为我的连接池 问题在于 c3p0 将 ResultSet 包装在 NewPr
  • 如何让 sphinx 在构建 html 时查找 virtualenv 中的模块?

    我想使用 virtualenv 而不是我机器上的本机环境来构建 html 文档 我已经进入 virtualenv 但当我运行时make html我收到错误消息 提示模块无法导入 Iknow这些错误是由于该模块在我的本机环境中不可用造成的 如
  • 我可以为 Istio 预置的经典 AWS ELB 定义子域吗?

    我将 Istio 部署在 AWS EKS 托管的 Kubernetes 集群中 这创建了一个名为 istio ingressgateway 的 LoadBalancer 类型的 Kubernetes 服务 其外部主机名为 redacted