<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>azure | 伪架构师</title>
    <link>/tags/azure/</link>
      <atom:link href="/tags/azure/index.xml" rel="self" type="application/rss+xml" />
    <description>azure</description>
    <generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>zh</language><lastBuildDate>Wed, 25 Jul 2018 09:13:35 +0800</lastBuildDate>
    <image>
      <url>/img/logo-wide.png</url>
      <title>azure</title>
      <link>/tags/azure/</link>
    </image>
    
    <item>
      <title>小技巧：外部域名挂接 Azure 中的 K8S 负载均衡</title>
      <link>/post/azure-lb/</link>
      <pubDate>Wed, 25 Jul 2018 09:13:35 +0800</pubDate>
      <guid>/post/azure-lb/</guid>
      <description>&lt;p&gt;使用 &lt;a href=&#34;https://github.com/Azure/acs-engine&#34; target=&#34;_blank&#34;&gt;ACS Engine&lt;/a&gt; 在 Azure 上安装好了 Kubernetes 之后，就可以使用 Loadbalancer 类型的服务了。测试条件下，一般会使用不同域名通过同一个 Ingress Controller 访问不同服务的方式。&lt;/p&gt;

&lt;p&gt;例如我们创建一个 Nginx Ingress Controller，服务启动之后会看到大概这样的信息：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;$ kubectl describe svc ingress-nginx
Name:                     ingress-nginx
Namespace:                ingress-nginx
...
Type:                     LoadBalancer
IP:                       10.0.22.78
LoadBalancer Ingress:     104.216.145.198
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;接下来可以使用 &lt;a href=&#34;https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest&#34; target=&#34;_blank&#34;&gt;az&lt;/a&gt; 命令查询我们 Azure 中已经生效的外部 IP 所对应的记录内容：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;az network public-ip list \
--query &amp;quot;[?ipAddress==&#39;104.216.145.198&#39;]&amp;quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;会得到一条 JSON 记录：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-json&#34;&gt;{
&amp;quot;dnsSettings&amp;quot;: {
    &amp;quot;domainNameLabel&amp;quot;: &amp;quot;k8s-5b&amp;quot;,
    &amp;quot;fqdn&amp;quot;: &amp;quot;k8s-5b.cloudapp.azure.com&amp;quot;,
    &amp;quot;reverseFqdn&amp;quot;: null
},
...
&amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;,
&amp;quot;idleTimeoutInMinutes&amp;quot;: 4,
&amp;quot;ipAddress&amp;quot;: &amp;quot;104.216.145.198&amp;quot;,
&amp;quot;ipConfiguration&amp;quot;: {
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;接下来，我们可以给这个 Ip 设置一个 AZURE 的内部域名，同样使用 &lt;code&gt;az&lt;/code&gt; 客户端：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;az network public-ip update
--name=k8s-master-ip-k8s-5b55d212-28708154 \
--set dnsSettings.domainN
ameLabel=&#39;awesome-name-fcsaqz87d&#39; \
--resource-group=k8s
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;命令执行后，会返回一长串的描述信息，跟上述的 List 结果类似，节选我们的变更部分：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-json&#34;&gt;&amp;quot;dnsSettings&amp;quot;: {
    &amp;quot;domainNameLabel&amp;quot;: &amp;quot;awesome-name-fcsaqz87d&amp;quot;,
    &amp;quot;fqdn&amp;quot;: &amp;quot;awesome-name-fcsaqz87d.southeastasia.cloudapp.azure.com&amp;quot;,
    &amp;quot;reverseFqdn&amp;quot;: null
  },
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;这里可以看到，这个外部 IP 有了一个域名，接下来，我们可以在我们的域名提供商控制台上，为域名设置 CNAME 记录，指到这个 &lt;code&gt;fqdn&lt;/code&gt; 上，然后可以用 nslookup 上进行验证，例如：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;nslookup prom.abc.xyz
canonical name = awesome-name-fcsaqz87d.southeastasia.cloudapp.azure.com.
Name:   awesome-name-fcsaqz87d.southeastasia.cloudapp.azure.com
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;就可以用外部域名来访问我们 Kubernetes 上的 Ingress 资源了。&lt;/p&gt;

&lt;p&gt;更进一步的，可以将泛域名设置到这一 IP 上，同时使用 &lt;a href=&#34;https://letsencrypt.org/&#34; target=&#34;_blank&#34;&gt;Let&amp;rsquo;s Encrypt&lt;/a&gt; 的泛域名证书来完成对服务的 HTTPS 加固过程。&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>在 Azure 上运行 Istio 的注意事项</title>
      <link>/post/istion-on-azure-k8s/</link>
      <pubDate>Fri, 02 Feb 2018 23:04:20 +0800</pubDate>
      <guid>/post/istion-on-azure-k8s/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;ACS Engine: v0.12.4&lt;/li&gt;
&lt;li&gt;Istio: v0.5.0&lt;/li&gt;
&lt;li&gt;Kubernetes: v1.8.7&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;在 Istio 注入之后，生成的 Init 容器中会有 RunAs 的 SecurityContext，而 ACS Engine 的缺省 admission 包含了&lt;code&gt;SecurityContextDeny&lt;/code&gt;，会拒绝这一选项，造成 Istio Workload 无法运行，&lt;/p&gt;

&lt;p&gt;解决方法很简单，只要在定义文件中修改 api server 配置：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-json&#34;&gt;&amp;quot;properties&amp;quot;: {
  &amp;quot;orchestratorProfile&amp;quot;: {
    &amp;quot;kubernetesConfig&amp;quot;: {
        &amp;quot;apiServerConfig&amp;quot;: {
            &amp;quot;--request-timeout&amp;quot;: &amp;quot;30s&amp;quot;,
            &amp;quot;--admission-control&amp;quot;: &amp;quot;NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DenyEscalatingExec,AlwaysPullImages&amp;quot;
        }

&lt;/code&gt;&lt;/pre&gt;
</description>
    </item>
    
  </channel>
</rss>
