<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Service on Jerry Wang</title>
    <link>https://solaim.github.io/tags/service/</link>
    <description>Recent content in Service on Jerry Wang</description>
    <image>
      <title>Jerry Wang</title>
      <url>https://solaim.github.io/img/favicon.webp</url>
      <link>https://solaim.github.io/img/favicon.webp</link>
    </image>
    <generator>Hugo -- 0.158.0</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 06 Jun 2021 11:17:45 +0800</lastBuildDate>
    <atom:link href="https://solaim.github.io/tags/service/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>说说k8s网络</title>
      <link>https://solaim.github.io/posts/%E8%AF%B4%E8%AF%B4k8s%E7%BD%91%E7%BB%9C/</link>
      <pubDate>Sun, 06 Jun 2021 11:17:45 +0800</pubDate>
      <guid>https://solaim.github.io/posts/%E8%AF%B4%E8%AF%B4k8s%E7%BD%91%E7%BB%9C/</guid>
      <description>&lt;h2 id=&#34;1k8s组件&#34;&gt;1、k8s组件&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;组件&#34; loading=&#34;lazy&#34; src=&#34;https://solaim.github.io/img/components-of-kubernetes.svg&#34;&gt;&lt;/p&gt;
&lt;p&gt;k8s的组件分为两大部分：控制平面组件和节点组件。&lt;/p&gt;
&lt;p&gt;控制平面组件包括：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;kube-apiserver：API server，可以水平扩展。&lt;/li&gt;
&lt;li&gt;etcd：后端存储。&lt;/li&gt;
&lt;li&gt;kube-scheduler：决策新创建的Pod在哪个Node上运行。&lt;/li&gt;
&lt;li&gt;kube-controller-manager：controller进程，观测Object的状态，current state -&amp;gt; desired state。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;节点组件包括：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;kubelet：运行Pod。&lt;/li&gt;
&lt;li&gt;kube-proxy：网络代理， k8s中Service的部分实现，负责维护节点上的网络规则。&lt;/li&gt;
&lt;li&gt;Container runtime：Docker、containerd、CRI-O。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;2k8s网络需要解决的问题&#34;&gt;2、k8s网络需要解决的问题&lt;/h2&gt;
&lt;p&gt;k8s对任何CNI实现有如下规定：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pod与Pod之间的通信无须使用NAT&lt;/li&gt;
&lt;li&gt;节点与Pod之间的通信无须使用NAT&lt;/li&gt;
&lt;li&gt;Pod与其他Pod看到自身的IP相同&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;k8s中的Service负责对内、对外暴露网络访问，想让应用能够在集群内外正常访问，需要解决下面的几个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;容器与容器的通信&lt;/li&gt;
&lt;li&gt;Pod与Pod的通信&lt;/li&gt;
&lt;li&gt;Pod与Service的通信&lt;/li&gt;
&lt;li&gt;Internet与Service的通信&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;3容器与容器的通信&#34;&gt;3、容器与容器的通信&lt;/h2&gt;
&lt;p&gt;在Linux中，使用Namespace机制实现内核级别资源的隔离，目前提供六种Namespace：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Mount&lt;/code&gt;: 隔离文件系统挂载点&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UTS&lt;/code&gt;: 隔离主机名和域名信息&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IPC&lt;/code&gt;: 隔离进程间通信&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PID&lt;/code&gt;: 隔离进程的ID&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Network&lt;/code&gt;: 隔离网络资源&lt;/li&gt;
&lt;li&gt;&lt;code&gt;User&lt;/code&gt;: 隔离用户和用户组的ID&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;网络命名空间netns存在一个root network namespace，默认情况下，Linux将每个进程的netns设置为root，以提供网络访问。&lt;/p&gt;
&lt;p&gt;对于Docker，Pod使用同一个网络命名空间，Pod之间通过Namespace隔离，Pod内的容器共享网络命名空间，Docker负责创建网络命名空间，应用容器使用-network加入该网络命名空间，容器之间通过localhost通信。&lt;/p&gt;
&lt;h2 id=&#34;4pod与pod的通信&#34;&gt;4、Pod与Pod的通信&lt;/h2&gt;
&lt;p&gt;k8s中，每个Pod拥有一个真实的IP，Pod之间通过IP通信。&lt;/p&gt;
&lt;p&gt;（本节图片来源：Kevin Sookocheff Blog）&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;虚拟网桥&#34; loading=&#34;lazy&#34; src=&#34;https://sookocheff.com/post/kubernetes/understanding-kubernetes-networking-model/pods-connected-by-bridge.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;同节点Pod通信&#34; loading=&#34;lazy&#34; src=&#34;https://sookocheff.com/post/kubernetes/understanding-kubernetes-networking-model/pod-to-pod-same-node.gif&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;跨节点Pod通信&#34; loading=&#34;lazy&#34; src=&#34;https://sookocheff.com/post/kubernetes/understanding-kubernetes-networking-model/pod-to-pod-different-nodes.gif&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;5pod与service的通信&#34;&gt;5、Pod与Service的通信&lt;/h2&gt;
&lt;p&gt;Pod随着时间，可能消失、重启，那么直接使用Pod IP进行访问，在动态变化的环境中会存在网络问题。k8s中使用Service解决这个问题。（本节图片来源：Kevin Sookocheff Blog）&lt;/p&gt;
&lt;p&gt;创建一个新的Service Object，实际上是创建了一个虚拟IP和一系列网络规则。&lt;/p&gt;
&lt;p&gt;kube-proxy负责维护、更新、删除、添加网络规则，其支持的代理模式有：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;userspace&lt;/li&gt;
&lt;li&gt;iptables（默认）&lt;/li&gt;
&lt;li&gt;ipvs&lt;/li&gt;
&lt;li&gt;kernelspace (windows)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;Pod到Service通信&#34; loading=&#34;lazy&#34; src=&#34;https://sookocheff.com/post/kubernetes/understanding-kubernetes-networking-model/pod-to-service.gif&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Service到Pod通信&#34; loading=&#34;lazy&#34; src=&#34;https://sookocheff.com/post/kubernetes/understanding-kubernetes-networking-model/service-to-pod.gif&#34;&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
