应用迁入

迁入服务

发布服务

以下指南介绍了如何将 Kubernetes 微服务迁入 osm-edge 实例。

  1. 在迁入应用之前,参考 应用要求 指南。

  2. 配置并安装 服务网格接口 (Service Mesh Interface,SMI) 策略

    osm-edge 符合 SMI 规范,默认情况下,osm-edge 禁止 Kubernetes 服务间的通信,除非显式地通过 SMI 策略来允许。这种行为可以通过在 osm install 时指定 --set=osm.enablePermissiveTrafficPolicy=true 参数来覆盖,允许不执行SMI策略,同时允许流量和服务仍然利用诸如mTLS加密流量、指标和跟踪等功能。。

    SMI 策略的例子,请参阅以下示例:

  3. 网格中的应用如果需要与 Kubernetes API server 通信,用户需要显式地通过使用 IP 地址范围排除或者创建类似下面的出口策略来允许。

    首选,获取 Kubernetes API server 的集群 IP:

    $ kubectl get svc -n default
    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP   1d
    

    方法1: 将 Kubernetes API server 的地址添加到全局出站 IP 范围进行排除。IP 地址可以是集群 IP 地址或公共 IP 地址,应适当排除来连接到 Kubernetes API server。

    添加这个 IP 到 MeshConfig 使得出站流量可以从 osm-edge sidecar 的流量劫持中排除:

    $ kubectl patch meshconfig osm-mesh-config -n <osm-namespace> -p '{"spec":{"traffic":{"outboundIPRangeExclusionList":["10.0.0.1/32"]}}}'  --type=merge
    meshconfig.config.openservicemesh.io/osm-mesh-config patched
    

    重启网格监控的命名空间的相关 pod 让改动生效。

    方法2: 应用 Egress 策略允许通过 HTTPS 访问 Kubernetes API server。

    注意:当使用 Egress 策略时,Kubernetes API server不能位于网格管理的命名空间中

    1. 启用出口策略,如果没有启用的话。
    kubectl patch meshconfig osm-mesh-config -n <osm-namespace> -p '{"spec":{"featureFlags":{"enableEgressPolicy":true}}}'  --type=merge
    
    1. 应用出口策略允许应用的 ServiceAccount 访问上面得到的 Kubernetes API server 的集群 IP。

      例如:

      kubectl apply -f - <<EOF
      kind: Egress
      apiVersion: policy.openservicemesh.io/v1alpha1
      metadata:
          name: k8s-server-egress
          namespace: test
      spec:
          sources:
          - kind: ServiceAccount
            name: <app pod's service account name>
            namespace: <app pod's service account namespace>
          ipAddresses:
          - 10.0.0.1/32
          ports:
          - number: 443
            protocol: https
      EOF
      
  4. 将 Kubernetes 命名空间迁入 osm-edge

    如果要将命名空间下的所有应用都纳入 osm-edge 网格管理,执行 osm namespace add 命令:

    $ osm namespace add <namespace> --mesh-name <mesh-name>
    

    默认情况下,osm namespace add 为命名空间下的 pod 开启自动的 sidecar 注入。

    如果要禁用 sidecar 的自动注入,在将命名空间注册到网格时使用命令 osm namespace add <namespace> --disable-sidecar-injection。 一旦命名空间迁入,注册到网格的 pod 将自动注入 sidecar。参考文档 Sidecar 注入 获取更多详细信息。

  5. 部署新应用或重新部署已有应用

    默认地,已迁入的命名空间中新部署的应用会自动注入 sidecar。这意味着当在纳入网格的命名空间中创建新 Pod 时,osm-edge 会自动为其注入 sidecar 代理。 已有的应用需要重启来让 osm-edge 在重建 Pod 时自动为其注入 sidecar 代理。被 Deployment 管理的 Pod 可以使用命令 kubectl rollout restart deploy 来重启。

    为了正确地将协议指定的流量路由到服务端口,需要配置应用使用的协议。参考 应用协议选择指南

注意:移除命名空间

要从 osm-edge 网格中移除命名空间,可以使用命令 osm namespace remove

$ osm namespace remove <namespace>

请注意: osm namespace remove 命令指示告诉 osm-edge 停止对命名空间中的 sidecar 代理配置应用更新。并不会移除 sidecar 代理。这意味着可以继续使用现有的代理配置,但是不会收到 osm-edge 控制平面的更新。如果想要移除所有 pod 的代理,在使用 CLI 将命名空间从 osm-edge 网格移除后重新安装所有 pod 负载。


先决条件

应用程序要求

添加命名空间

本节介绍 osm-edge 如何以及为何监控 Kubernetes 命名空间

Sidecar 注入

本章节描述 osm-edge 中 sidecar 的注入流程。

应用协议选择

应用协议选择