每个人我都在网上搜索了一整天,但找不到一个完整而体面的例子来说明如何将大使 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”命名空间。