我是 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 入口网关 pod 标签名称,需要在选择器中给出,因为外部流量将通过入口网关 pod 进入。除非在 istio 安装过程中更改了入口网关的名称。
请在网关定义中提及,它将把流量路由到应用程序。
spec:
selector:
istio: ingressgateway
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 设置。如果您需要更多详细信息或特殊内容,您可以随时查看文档页面。
就像其他人在答案中提到的那样,
selector
键查找标签。在本例中,它正在寻找一个 istio
标签来关联网关对象。
您的网关定义的
istio
标签的值应与应运行的当前 Istio Gateway pod 的 istio
标签的值匹配。
假设您已经在 Kubernetes 集群中部署了 Istio,Istio 网关是通过
Deployment
对象建立的。你可以发现这个istio
值必须是多少:
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
。
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