Istio 网关配置中的规格/选择器标签是什么?

问题描述 投票:0回答:3

我是 Istio Gateway 的新手,我的目标是为部署在 K8s 上的服务创建一个 Ingress Gateway。

我对官方文档中的网关示例有点困惑:https://istio.io/latest/docs/concepts/traffic-management/#gateway-example

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: ext-host-gwy
spec:
  selector:
    app: my-gateway-controller
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTPS
    hosts:
    - ext-host.example.com
    tls:
      mode: SIMPLE
      credentialName: ext-host-cert

在此示例中,spec/selector 下的

app: my-gateway-controller
是什么?这个 my-gateway-controller 是否需要额外的配置/部署?

我尝试在文档的其余部分中搜索“my-gateway-controller”,但没有找到进一步的解释。

istio istio-gateway
3个回答
0
投票

通常是 istio 入口网关 pod 标签名称,需要在选择器中给出,因为外部流量将通过入口网关 pod 进入。除非在 istio 安装过程中更改了入口网关的名称。

请在网关定义中提及,它将把流量路由到应用程序。

spec:
  selector:
    istio: ingressgateway

0
投票

Istio 可以使用不同的选项进行安装。它们具有不同的配置文件,可用于测试、默认场景和自定义设置。一种选择是配置入口控制器(但您也可以没有并使用不同的非 istio 入口控制器)。

根据您的设置,您可以没有入口网关、默认入口网关或自定义网关。

默认网关有一个名为

istio: ingressgateway
的标签。您可以在大多数示例/入门文档中找到这一点,例如在如何设置安全入口

这里

Gateway
看起来像这样:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: mygateway
spec:
  selector:
    istio: ingressgateway # use istio default ingress gateway
[...]

另一个选项是设置可能具有不同名称的第二个入口网关。例如,您可以使用

IstioOperator
清单来配置它。

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    ingressGateways:
    - enabled: true
      name: my-gateway-controller

该入口网关 Pod 将获得

app: my-gateway-controller
标签。该标签可以像您发布的示例中那样使用。因此,您可以检查您拥有的所有入口网关 Pod 并选择您需要的标签。

如果您使用默认设置,您可能拥有默认入口网关,并且可以简单地将选择器更改为

istio: ingressgateway

一开始,我建议坚持使用 tasks 部分 来配置您的设置,因为它使用大多数人拥有的默认 istio 设置。如果您需要更多详细信息或特殊内容,您可以随时查看文档页面。


0
投票

就像其他人在答案中提到的那样,

selector
键查找标签。在本例中,它正在寻找一个
istio
标签来关联网关对象。

您的网关定义的

istio
标签的值应与应运行的当前 Istio Gateway pod 的
istio
标签的值匹配。

假设您已经在 Kubernetes 集群中部署了 Istio,Istio 网关是通过

Deployment
对象建立的。你可以发现这个
istio
值必须是多少:

第 1 步:找出部署了 Istio Gateway Pod 的内容。

kubectl get deployments -n '<namespace where Istio is deployed>'

您应该看到一些表输出以及该命名空间的部署。

例如:

> kubectl get deployment istio-system

NAME            READY   UP-TO-DATE   AVAILABLE   AGE
istio-gateway   1/1     1            1           24m
istiod          1/1     1            1           24m
jaeger          1/1     1            1           24m
kiali           1/1     1            1           21m

在我的例子中,部署称为

istio-gateway

步骤 #2:找出
istio
标签的值是多少。

如果你跑步:

kubectl get deployment -n '<namespace where Istio is deployed>' '<name of your Istio deployment>' -o yaml

您应该看到如下输出:

> kubectl get deployment -n istio-system istio-gateway -o yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: istio-gateway
    istio: gateway # <- this is what you want!
  name: istio-gateway
  namespace: istio-system
© www.soinside.com 2019 - 2024. All rights reserved.