配置入口网关¶
Knative 使用共享的入口网关(Gateway)来服务 Knative 服务网格中的所有传入流量,该网关是位于 knative-serving 命名空间下的 knative-ingress-gateway 网关。默认情况下,我们使用 istio-system 命名空间下的 Istio 网关服务 istio-ingressgateway 作为其底层服务。您可以按照以下步骤将该服务和网关替换为您自己的服务和网关。
替换默认的 istio-ingressgateway 服务¶
第 1 步:创建网关服务和部署实例¶
您需要先创建网关服务和部署实例来处理流量。假设您将默认的 istio-ingressgateway 自定义为 custom-ingressgateway,如下所示。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
components:
ingressGateways:
- name: custom-ingressgateway
enabled: true
namespace: custom-ns
label:
istio: custom-gateway
第 2 步:更新 Knative 网关¶
更新 knative-serving 命名空间下的网关实例 knative-ingress-gateway
kubectl edit gateway knative-ingress-gateway -n knative-serving
将标签选择器替换为您服务的标签
istio: ingressgateway
对于前面提到的 custom-ingressgateway 示例服务,应更新为
istio: custom-gateway
如果服务端口有变化(与 istio-ingressgateway 相比),请相应地更新网关中的端口信息。
第 3 步:更新网关配置映射 (ConfigMap)¶
-
更新
knative-serving命名空间下的网关配置映射config-istiokubectl edit configmap config-istio -n knative-serving此命令会打开您的默认文本编辑器,允许您编辑 config-istio ConfigMap。
apiVersion: v1 data: _example: | ################################ # # # EXAMPLE CONFIGURATION # # # ################################ # ... external-gateways: | - name: knative-ingress-gateway namespace: knative-serving service: istio-ingressgateway.istio-system.svc.cluster.local -
编辑文件以添加
external-gateways字段,其中包含您服务的完全限定 URL。对于前面提到的custom-ingressgateway示例服务,应更新为apiVersion: v1 data: external-gateways: | - name: knative-ingress-gateway namespace: knative-serving service: custom-ingressgateway.custom-ns.svc.cluster.local kind: ConfigMap [...]
替换 knative-ingress-gateway 网关¶
到目前为止,我们已经自定义了网关服务,但我们可能还想使用自己的网关。我们可以通过以下步骤将默认网关替换为我们自己的网关。
第 1 步:创建网关¶
假设您在 custom-ns 中将默认的 knative-ingress-gateway 网关替换为 knative-custom-gateway。首先,创建 knative-custom-gateway 网关
-
使用以下模板创建 YAML 文件
其中apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: knative-custom-gateway namespace: custom-ns spec: selector: istio: <service-label> servers: - port: number: 80 name: http protocol: HTTP hosts: - "*"<service-label>是一个用于选择您服务的标签,例如ingressgateway。 -
通过运行命令应用 YAML 文件
其中kubectl apply -f <filename>.yaml<filename>是您在上一步中创建的文件的名称。
第 2 步:更新网关配置映射 (ConfigMap)¶
-
更新
knative-serving命名空间下的网关配置映射config-istiokubectl edit configmap config-istio -n knative-serving此命令会打开您的默认文本编辑器,允许您编辑 config-istio ConfigMap。
apiVersion: v1 data: _example: | ################################ # # # EXAMPLE CONFIGURATION # # # ################################ # ... external-gateways: | - name: knative-ingress-gateway namespace: knative-serving service: istio-ingressgateway.istio-system.svc.cluster.local -
编辑文件以添加
external-gateways字段,其中包含自定义网关。对于前面提到的knative-custom-gateway示例,应更新为apiVersion: v1 data: external-gateways: | - name: knative-custom-gateway namespace: custom-ns service: istio-ingressgateway.istio-system.svc.cluster.local kind: ConfigMap [...]
配置格式应为
external-gateways: |
- name: <gateway-name>
namespace: <gateway-namespace>
service: <fully-qualified-url-of-istio-ingress-service>