1

每个人我都在网上搜索了一整天,但找不到一个完整而体面的例子来说明如何将大使 api 网关用作 istio 入口。大使网站上关于 istio 的默认文档不够清楚。那么有人可以提供一个完整而详细的示例来说明如何使用大使 Api 网关和 istio 服务网格吗?

My platform specs are
OS: Windows10
Container-Platform: Docker-desktop
Kubernetes-version: 1.10.11
4

2 回答 2

1

这个主题在大使文档中有详细解释:

Ambassador 是用于微服务的 Kubernetes 原生 API 网关。Ambassador 部署在您的网络边缘,并将传入流量路由到您的内部服务(也称为“南北”流量)。Istio是用于微服务的服务网格,旨在为服务到服务的流量(也称为“东西向”流量)添加应用程序层 (L7) 的可观察性、路由和弹性。Istio 和 Ambassador 都是使用Envoy构建的。

请点击此链接获取如何让 Ambassador 与 Istio 合作的分步指南。


此外,您需要更新您的 Kubernetes 版本,因为 Istio 要求是:

  • Istio1.41.3已在 Kubernetes 上进行了测试:1.13, 1.14, 1.15.

  • Istio1.2已经在 Kubernetes 上进行了测试:1.12, 1.13, 1.14.

我建议避免使用旧版本。

于 2020-01-07T12:10:32.543 回答
0

几个小时后,我成功地将 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”命名空间。

于 2020-10-09T07:23:29.263 回答