每个人我都在网上搜索了一整天,但找不到一个完整而体面的例子来说明如何将大使 api 网关用作 istio 入口。大使网站上关于 istio 的默认文档不够清楚。那么有人可以提供一个完整而详细的示例来说明如何使用大使 Api 网关和 istio 服务网格吗?
My platform specs are
OS: Windows10
Container-Platform: Docker-desktop
Kubernetes-version: 1.10.11
每个人我都在网上搜索了一整天,但找不到一个完整而体面的例子来说明如何将大使 api 网关用作 istio 入口。大使网站上关于 istio 的默认文档不够清楚。那么有人可以提供一个完整而详细的示例来说明如何使用大使 Api 网关和 istio 服务网格吗?
My platform specs are
OS: Windows10
Container-Platform: Docker-desktop
Kubernetes-version: 1.10.11
这个主题在大使文档中有详细解释:
Ambassador 是用于微服务的 Kubernetes 原生 API 网关。Ambassador 部署在您的网络边缘,并将传入流量路由到您的内部服务(也称为“南北”流量)。Istio是用于微服务的服务网格,旨在为服务到服务的流量(也称为“东西向”流量)添加应用程序层 (L7) 的可观察性、路由和弹性。Istio 和 Ambassador 都是使用Envoy构建的。
请点击此链接获取如何让 Ambassador 与 Istio 合作的分步指南。
此外,您需要更新您的 Kubernetes 版本,因为 Istio 要求是:
Istio1.4
并1.3
已在 Kubernetes 上进行了测试:1.13
, 1.14
, 1.15
.
Istio1.2
已经在 Kubernetes 上进行了测试:1.12
, 1.13
, 1.14
.
我建议避免使用旧版本。
几个小时后,我成功地将 Ambassador 1.8 与 Istio 1.7.3 集成。mTLS 集成非常棘手。
首先,我使用以下 extraArgs 将 Kubernetes 升级到最新版本(1.19.2):
extraArgs:
service-account-issuer: kubernetes.default.svc
service-account-signing-key-file: /etc/kubernetes/pki/sa.key
然后使用默认配置文件安装 Istio。
然后我继续使用 Piotr 提到的文档,但 Ambassador pod 不想启动。因此,我将文档中的 side car 与 Istio 在另一个 pod 中自动生成的 side car 进行了逐行比较。最后我得到了以下工作部署yaml:
api版本:应用程序/v1 种类:部署 元数据: 姓名:大使 命名空间:火箭 规格: 复制品:1 选择器: 匹配标签: 服务:大使 模板: 元数据: 注释: consul.hashicorp.com/connect-inject: '假' sidecar.istio.io/inject: '假' 标签: 服务:大使 app.kubernetes.io/managed-by:getambassador.io 规格: 亲和力: podAntiAffinity: 首选DuringSchedulingIgnoredDuringExecution: - podAffinityTerm: 标签选择器: 匹配标签: 服务:大使 topologyKey:kubernetes.io/hostname 重量:100 容器: - 姓名:大使 图片:docker.io/datawire/ambassador:1.8.0 环境: - 名称:AMBASSADOR_NAMESPACE 值来自: 字段参考: 字段路径:元数据.命名空间 - 名称:HOST_IP 值来自: 字段参考: 字段路径:status.hostIP - 名称:REDIS_URL 值:大使-redis:6379 - 名称:AMBASSADOR_URL 值:https://ambassador.rocket.svc.cluster.local - 名称:POLL_EVERY_SECS 值:'60' - 名称:AMBASSADOR_INTERNAL_URL 值:https://127.0.0.1:8443 - 名称:AMBASSADOR_SINGLE_NAMESPACE 值:“是” - 名称:大使 ID 值:“大使火箭” # 运行 istio-proxy sidecar 所必需的 - 名称:AMBASSADOR_ENVOY_BASE_ID 值:“1” 端口: - 容器端口:8080 名称:http - 容器端口:8443 名称:https - 容器端口:8877 名称:http-admin 活性探针: http获取: 路径:/ambassador/v0/check_alive 端口:http-admin periodSeconds: 3 就绪探针: http获取: 路径:/ambassador/v0/check_ready 端口:http-admin periodSeconds: 3 资源: 限制: 中央处理器:1000m 内存:600Mi 要求: 中央处理器:200m 内存:300Mi 安全上下文: allowPrivilegeEscalation: false 体积安装: - 安装路径:/tmp/ambassador-pod-info 名称:大使-pod-info - 挂载路径:/etc/istio-certs/ 名称:istio-certs - 名称:istio-proxy # 使用与 Istio 安装相同的版本 图片:docker.io/istio/proxyv2:1.7.3 参数: - 代理人 - 边车 - - 领域 - $(POD_NAMESPACE).svc.cluster.local - --serviceCluster - istio-proxy-ambassador.$(POD_NAMESPACE) - --discovery地址 - istiod.istio-system.svc:15012 - --connectTimeout - 10 秒 - --status端口 - “15020” - --trust-domain=cluster.local - --controlPlaneBootstrap=false 环境: - 名称:OUTPUT_CERTS 值:“/etc/istio-certs” - 名称:JWT_POLICY 值:第三方-jwt - 名称:PILOT_CERT_PROVIDER 值: istiod - 名称:CA_ADDR 值:istiod.istio-system.svc:15012 - 名称:ISTIO_META_MESH_ID 值:cluster.local - 名称:POD_NAME 值来自: 字段参考: 字段路径:元数据名称 - 名称:POD_NAMESPACE 值来自: 字段参考: 字段路径:元数据.命名空间 - 名称:INSTANCE_IP 值来自: 字段参考: 字段路径:status.podIP - 名称:SERVICE_ACCOUNT 值来自: 字段参考: 字段路径:spec.serviceAccountName - 名称:HOST_IP 值来自: 字段参考: 字段路径:status.hostIP - 名称:ISTIO_META_POD_NAME 值来自: 字段参考: api版本:v1 字段路径:元数据名称 - 名称:ISTIO_META_CONFIG_NAMESPACE 值来自: 字段参考: api版本:v1 字段路径:元数据.命名空间 - 名称:ISTIO_META_CLUSTER_ID 价值:Kubernetes imagePullPolicy: IfNotPresent 资源: 限制: 中央处理器:2000m 内存:1024Mi 要求: 中央处理器:100m 内存:128Mi 就绪探针: 失败阈值:30 http获取: 路径:/healthz/ready 端口:15020 方案:HTTP 初始延迟秒数:1 periodSeconds: 2 成功阈值:1 超时秒数:1 体积安装: - 挂载路径:/var/run/secrets/istio 名称:istiod-ca-cert - 挂载路径:/etc/istio/proxy 名称:istio-envoy - 挂载路径:/etc/istio-certs/ 名称:istio-certs - 挂载路径:/var/run/secrets/tokens 名称:istio-token 安全上下文: 运行用户:0 卷: - 名称:istio-certs 空目录: 介质:记忆 - 名称:istiod-ca-cert 配置映射: 默认模式:420 名称:istio-ca-root-cert - 名称:istio-envoy 空目录: 介质:记忆 - 名称:istio-token 预计: 默认模式:420 来源: - 服务帐户令牌: 观众:istio-ca 过期秒数:43200 路径:istio-token - 向下API: 项目: - 字段参考: 字段路径:metadata.labels 路径:标签 名称:大使-pod-info 重启策略:总是 安全上下文: 运行用户:8888 serviceAccountName:大使 终止GracePeriodSeconds:0
注意:我更喜欢每个集群运行一个 Istio,每个命名空间运行一个 Ambassador,因此我将 Ambassador pod 和我的其他 pod 放入“rocket”命名空间。