<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>galley | 伪架构师</title>
    <link>/tags/galley/</link>
      <atom:link href="/tags/galley/index.xml" rel="self" type="application/rss+xml" />
    <description>galley</description>
    <generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>zh</language><lastBuildDate>Sat, 27 Oct 2018 15:50:59 +0800</lastBuildDate>
    <image>
      <url>/img/logo-wide.png</url>
      <title>galley</title>
      <link>/tags/galley/</link>
    </image>
    
    <item>
      <title>Istio Helm Chart 详解 - Galley</title>
      <link>/post/istio-helm-deep-dive-galley/</link>
      <pubDate>Sat, 27 Oct 2018 15:50:59 +0800</pubDate>
      <guid>/post/istio-helm-deep-dive-galley/</guid>
      <description>

&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://istio.io/docs/reference/commands/galley/&#34; target=&#34;_blank&#34;&gt;Galley&lt;/a&gt; 是 Istio 的配置管理组件，根据&lt;a href=&#34;https://preliminary.istio.io/zh/docs/concepts/what-is-istio/#galley&#34; target=&#34;_blank&#34;&gt;官方文档&lt;/a&gt;的描述：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Galley 代表其他的 Istio 控制平面组件，用来验证用户编写的 Istio API 配置。随着时间的推移，Galley 将接管 Istio 获取配置、 处理和分配组件的顶级责任。它将负责将其他的 Istio 组件与从底层平台（例如 Kubernetes）获取用户配置的细节中隔离开来。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;values-yaml-中的相关变量&#34;&gt;values.yaml 中的相关变量&lt;/h2&gt;

&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;galley:
  enabled: true
  replicaCount: 1
  image: galley
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;这里看到，Galley 的相关变量只有启用、副本数量以及镜像三个。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;enabled&lt;/code&gt;：负责在 &lt;code&gt;requirements.yaml&lt;/code&gt; 中标识是否启用 Galley 组件。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;replicaCount&lt;/code&gt;：负责在 &lt;code&gt;deployment.yaml&lt;/code&gt; 中定义副本数量。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;image&lt;/code&gt;：负责在 &lt;code&gt;deployment.yaml&lt;/code&gt; 中定义镜像。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;rbac-相关内容&#34;&gt;RBAC 相关内容&lt;/h2&gt;

&lt;p&gt;这里可以看到 Galley 使用 Service Account &lt;code&gt;istio-galley-service-account&lt;/code&gt; 的身份运行。全局变量中如果定义了 &lt;code&gt;imagePullSecrets&lt;/code&gt;，则会在 &lt;code&gt;serviceaccount.yaml&lt;/code&gt; 中进行引用。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;clusterrole.yaml&lt;/code&gt; 模板中定义了 Galley 所需使用的系统资源：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;对 &lt;code&gt;admissionregistration.k8s.io&lt;/code&gt; 组中的 &lt;code&gt;validatingwebhookconfigurations&lt;/code&gt; 类型的完全控制。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config.istio.io&lt;/code&gt;： Mixer CRD 的所有资源的读取权限。&lt;/li&gt;
&lt;li&gt;对 &lt;code&gt;istio-galley&lt;/code&gt; Deployment 和 Endpoint 的读取权限。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;clusterrolebinding.yaml&lt;/code&gt; 将上面的两个对象连接起来完成授权。&lt;/p&gt;

&lt;h2 id=&#34;service-yaml&#34;&gt;service.yaml&lt;/h2&gt;

&lt;p&gt;这里看到为 Galley 开放了两个端口：443 是一个 https 端口，用来提供验证服务；而 9093 是一个用来进行 Galley 自身服务监控的 http 端口。&lt;/p&gt;

&lt;p&gt;该文件只引用了 &lt;code&gt;Release&lt;/code&gt; 内置变量。&lt;/p&gt;

&lt;h2 id=&#34;deployment-yaml&#34;&gt;deployment.yaml&lt;/h2&gt;

&lt;p&gt;这里以 &lt;a href=&#34;https://istio.io/docs/reference/commands/galley/&#34; target=&#34;_blank&#34;&gt;Galley&lt;/a&gt; 为主进程创建了一个 Deployment 对象。&lt;/p&gt;

&lt;p&gt;在 &lt;code&gt;annotation&lt;/code&gt; 一节中将 &lt;code&gt;sidecar.istio.io/inject&lt;/code&gt; 设置为 &lt;code&gt;false&lt;/code&gt; 来防止自动注入 Sidecar。&lt;/p&gt;

&lt;h3 id=&#34;全局变量&#34;&gt;全局变量&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Chart&lt;/li&gt;
&lt;li&gt;Release&lt;/li&gt;
&lt;li&gt;global.priorityClassName&lt;/li&gt;
&lt;li&gt;global.hub&lt;/li&gt;
&lt;li&gt;global.tag&lt;/li&gt;
&lt;li&gt;global.imagePullPolicy&lt;/li&gt;
&lt;li&gt;模板 nodeaffinity&lt;/li&gt;
&lt;li&gt;global.defaultResources&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;变量使用细节&#34;&gt;变量使用细节&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;部署在 Istio 所属命名空间中。&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;_helpers.tpl&lt;/code&gt; 中定义的模板给 App 标签赋值。&lt;/li&gt;
&lt;li&gt;使用 Chart 和 Release 变量生成 Deployment 标签。&lt;/li&gt;
&lt;li&gt;Chart 变量 &lt;code&gt;replicaCount&lt;/code&gt; 确定副本数量。&lt;/li&gt;
&lt;li&gt;如果定义了 &lt;code&gt;global.priorityClassName&lt;/code&gt;，则设置到 Pod 上，提高组件在集群内的优先级。&lt;/li&gt;
&lt;li&gt;使用 global.hub + image + global.tag 的方式设置镜像名称。&lt;/li&gt;
&lt;li&gt;如果 Chart 变量设置了 &lt;code&gt;resource&lt;/code&gt;，则使用独立的资源限制，否则使用缺省的 &lt;code&gt;global.defaultResources&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;使用缺省的节点亲和性定义。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;加载卷&#34;&gt;加载卷&lt;/h3&gt;

&lt;p&gt;加载了一个名为 &lt;code&gt;istio.istio-galley-service-account&lt;/code&gt; 的 Secret，注意这个资源的类型为 &lt;code&gt;istio.io/key-and-cert&lt;/code&gt;，说明是由 Citadel 生成的，其中包含了几个证书，供 &lt;code&gt;--caCertFile&lt;/code&gt;、&lt;code&gt;--tlsCertFile&lt;/code&gt; 和 &lt;code&gt;--tlsKeyFile&lt;/code&gt; 用来提供 https 服务。&lt;/p&gt;

&lt;p&gt;另外加载了一个 ConfigMap，其中的配置文件供 &lt;code&gt;--webhook-config-file&lt;/code&gt; 参数使用，作为 Webhook 的参数。这个 ConfigMap 是由模板 &lt;code&gt;configmap.yaml&lt;/code&gt; 和 &lt;code&gt;validatingwehookconfiguration.yaml.tpl&lt;/code&gt; 生成的，后面将会进行讲解。&lt;/p&gt;

&lt;h2 id=&#34;configmap-yaml-以及-validatingwehookconfiguration-yaml-tpl&#34;&gt;configmap.yaml 以及 validatingwehookconfiguration.yaml.tpl&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;configmap.yaml&lt;/code&gt; 模板中并没有实质内容，主要内容存在于 &lt;code&gt;validatingwehookconfiguration.yaml.tpl&lt;/code&gt; 之中。&lt;/p&gt;

&lt;p&gt;这个模板中定义了一个 &lt;a href=&#34;https://docs.okd.io/latest/rest_api/apis-admissionregistration.k8s.io/v1beta1.ValidatingWebhookConfiguration.html#object-schema&#34; target=&#34;_blank&#34;&gt;&lt;code&gt;ValidatingWebhookConfiguration&lt;/code&gt;&lt;/a&gt; 类型的资源。这种资源用于在不改变资源的情况下，对其进行校验并发出接受或拒绝的决策。&lt;/p&gt;

&lt;h3 id=&#34;引用全局变量&#34;&gt;引用全局变量&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Chart&lt;/code&gt; 和 &lt;code&gt;Release&lt;/code&gt;：用于生成标签和命名空间。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;global.configValidation&lt;/code&gt;：如果这一变量为 True，才会生成后续内容。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;webhook&#34;&gt;Webhook&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;webhooks&lt;/code&gt; 一节定义了两个元素，分别用于 Pilot 和 Mixer 的校验。以 Mixer 部分为例。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;clientConfig&lt;/code&gt; 一节，定义了这个 Webhook 会调用的校验服务，标准情况下会使用 Istio 所在的命名空间的 &lt;code&gt;istio-galley&lt;/code&gt;，URL 相对路径为 &lt;code&gt;/admitmixer&lt;/code&gt;，其中的 &lt;code&gt;rules&lt;/code&gt; 内容，定义了针对 &lt;code&gt;config.istio.io/v1alpha2&lt;/code&gt; 的一系列对象的创建和更新操作进行校验，如果校验失败，则拒绝创建（&lt;code&gt;failurePolicy: Fail&lt;/code&gt;）。&lt;/p&gt;

&lt;h2 id=&#34;结论&#34;&gt;结论&lt;/h2&gt;

&lt;p&gt;Galley 目前的文档非常少，主要在&lt;a href=&#34;https://istio.io/zh/docs/reference/commands/galley/&#34; target=&#34;_blank&#34;&gt;参考&lt;/a&gt;和&lt;a href=&#34;https://istio.io/zh/help/ops/setup/validation/&#34; target=&#34;_blank&#34;&gt;运维指南&lt;/a&gt;部分有一点介绍，但 Istio 的配置难度是很著名的，因此推测随着项目的推进和普及，Galley 会持续的增强，并提供更多这方面的文档。&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
