请选择 进入手机版 | 继续访问电脑版

设为首页 收藏本站
思科社区 关注
思科社区

  思科 CCO 登录
 找回密码
 立即注册

扫一扫,访问微社区

搜索
热搜: 邮件服务器
查看: 841|回复: 0

【小目标,一个“译”】+ 用Sidecar安全代理保护Jaeger(1)

[复制链接]
发表于 2018-6-27 17:18:38 | 显示全部楼层 |阅读模式
Jaeger产品部署中,我们限制访问Jaeger的查询服务包括用户界面(UI),是非常有益的。例如您可能有各种内部安全的要求,只允许某些群组能够访问跟踪数据或者您可能将Jaeger部署到了公有云之上。在真正的微服务(microservices方式里一种可能的方法是给Jaeger查询服务添加一个Sidecar作为安全代理。各种入向请求都被传递到我们的Sidecar而非直接到达Jaeger的查询服务上。而Sidecar将负责执行各种身份验证和授权的限制。
传入的HTTP请求到达路径(route)①它使用内部服务②来进行解析,并与安全代理③进行通信。一旦请求通过验证,且所有安全的限制得到了满足,则该请求就到达Jaeger
出于演示的目的我们将使用Keycloak(译者注:Keycloak是一个为浏览器和RESTful Web服务提供SSO的集成)作为自己的安全解决方案当然其他任何安全代理也都适用于这个理念。当然如果您并不修改Red HatSSOSingle Sign-On,这个演示也能够运作。因此对于本次操作练习我们需要如下:

  • 一台Keycloak或是Red HatSSO服务器的运行实例。我们定义它的位置$ { REDHAT_SSO_URL }
  • 一个OpenShift集群我们将用来运行Jaeger后端组件。它就像oc     cluster up一样容易
  • 一份Jaeger OpenShift产品模板的本地克隆
注意:我们并不会试图对组件之间(比如说从代理到收集器)的通信进行安全加固。而对于此类场景,我们完全可以使用其他技术来实现,例如相互间使用证书来进行认证采用istio(译者注:istio是一个开源项目,提供统一的连接、安全、管理和监控微服务),或其他类似的工具。

准备Keycloak
对于该演示我们将直接在主机上通过Docker来运行Keycloak。这是为了强调Keycloak需要像我们的Jaeger后端那样运行在同一个OpenShift集群之上。
下面的命令用来在主机上启动一个合适的Keycloak服务器。如果你已经有了自己的KeycloakRed HatSSO服务器的话,则完全跳过这一步骤。
docker run --rm--name keycloak-server -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=password -p8080:8080 jboss/keycloak

一旦Keycloak服务器启动并运行,我们就可以创建一个Jaeger的域(realm)了:

  • 请使用用户名:admin和密码:password,登录到Keycloakhttp://<YOUR_IP>:8080/auth/admin/master/console
  • 在左上角Select     realm中用鼠标点击Add realm。将其命名为jaeger,然后点击Create
  • Clients上,点击Create,将proxy-jaeger设置为名称并保存它。
  • 设置Access     Typeconfidential,并用*代表Valid     Redirect URIs,并保存之。您可能需要在生产环境中进行微调,否则可能会暴露出已知的未验证的重定向和转发Unvalidated Redirects and Forwards,译者注:源自OWASP TOP10 2010A10)攻击。
  • 打开Installation选项卡并选择Keycloak     OIDC JSON,然后复制其显示的JSON。如下所示,不过auth-server-urlsecret的值会有所不同。
{
  "realm": "jaeger"
  "auth-server-url":"http://192.168.2.111:8080/auth"
  "ssl-required":"external"
  "resource":"proxy-jaeger"
  "credentials": {
    "secret":"7f201319-1dfd-43cc-9838-057dac439046"
  }
}

最后,让我们创建一个角色和用户,使得我们能够登录Jaeger的查询服务:

  • 在左下侧菜单-Configure的下面,请打开Roles页面然后单击Add     role
  • 将角色的名称设置为user,并点击Save
  • 在左下侧菜单-Manage的下面,请打开Users页面然后单击Add user
  • 按照您的设想去填写该表格,并将Email     verified设置为ON,在并点击Save
  • 为该用户打开Credentials选项卡,并设置一个(临时的或非临时的)密码。
  • 打开该用户的Role     mappings选项卡,从Available     Roles列表中选择角色为user,再点击Add

准备OpenShift
对于该演示,我们假设您已经有一个OpenShift集群正在运行了。如果还没有的话,那么您可能需要参考minishift之类的工具了(译者注:minishift是一个通过虚拟机来模拟OpenShift集群的工具)。如果您正在运行最新版本的FedoraCentOSRed HatEnterprise Linux,您可能需要安装包origin-clients,并运行oc cluster up--version=latest。这样您就能有一个基本的、运行在本地的OpenShift集群。
为了方便演示我们将添加cluster-admin的权限给developer用户。同时我们创建如下的Jaeger命名空间:
oc login -usystem:admin
oc new-projectjaeger
oc adm policyadd-cluster-role-to-user cluster-admin developer -n jaeger
oc login -udeveloper


准备JaegerOpenShift模板
我们将使用Jaeger OpenShift产品模板(https://github.com/jaegertracing/jaeger-openshift/blob/master/production/jaeger-production-template.yml作为开始:克隆整个存储库,或者得到本地版本的模板。
第一步是添加sidecar容器到query-deployment对象里。在containers列表下我们指定了jaeger-query之后,就可以添加如下的sidecar代码:
        - image: jboss/keycloak-proxy
          name{JAEGER_SERVICE_NAME}-query-security-proxy
          volumeMounts:
          - mountPath: /opt/jboss/conf
            name:security-proxy-configuration-volume
          ports:
          - containerPort: 8080
            protocol: TCP
          readinessProbe:
            httpGet:
              path: "/"
              port: 8080

注意:该容器将volumeMount的名称指定为security-proxy-configuration-volume我们将使用它来存储代理的配置文件。您可以在spec/template/spec节点query-deployment指定容量,并同样设定dnsPolicy的属性(它应该是在前续的代码片段中):
        volumes:
          - configMap:
              name{JAEGER_SERVICE_NAME}-configuration
             items:
                - key: proxy
                  path: proxy.json
            name:security-proxy-configuration-volume


  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
平均得分0 (0 评价)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver | 思科社区  

GMT+8, 2018-10-24 05:24 , Processed in 0.103658 second(s), 32 queries .

京ICP备09041801号-187

版权所有 :copyright:1992-2019 思科系统  重要声明 | 保密声明 | 隐私权政策 | 商标 |

快速回复 返回顶部 返回列表