5479 lines
354 KiB
HTML
5479 lines
354 KiB
HTML
|
|
|||
|
<!DOCTYPE HTML>
|
|||
|
<html lang="zh-hans" >
|
|||
|
<head>
|
|||
|
<meta charset="UTF-8">
|
|||
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
|||
|
<title>Sidecar 的注入与流量劫持 · Kubernetes Handbook - Kubernetes中文指南/云原生应用架构实践手册 by Jimmy Song(宋净超)</title>
|
|||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|||
|
<meta name="description" content="">
|
|||
|
<meta name="generator" content="GitBook 3.2.3">
|
|||
|
<meta name="author" content="Jimmy Song(宋净超)">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<link rel="stylesheet" href="../gitbook/style.css">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<link rel="stylesheet" href="../gitbook/gitbook-plugin-page-toc-button/plugin.css">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<link rel="stylesheet" href="../gitbook/gitbook-plugin-image-captions/image-captions.css">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<link rel="stylesheet" href="../gitbook/gitbook-plugin-back-to-top-button/plugin.css">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<link rel="stylesheet" href="../gitbook/gitbook-plugin-search-plus/search.css">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<link rel="stylesheet" href="../gitbook/gitbook-plugin-tbfed-pagefooter/footer.css">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism-ghcolors.css">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<link rel="stylesheet" href="../gitbook/gitbook-plugin-lightbox/css/lightbox.min.css">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<link rel="stylesheet" href="../gitbook/gitbook-plugin-alerts/style.css">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<link rel="stylesheet" href="../gitbook/gitbook-plugin-fontsettings/website.css">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<meta name="HandheldFriendly" content="true"/>
|
|||
|
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
|||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
|||
|
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="../gitbook/images/apple-touch-icon-precomposed-152.png">
|
|||
|
<link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">
|
|||
|
|
|||
|
|
|||
|
<link rel="next" href="envoy-sidecar-routing-of-istio-service-mesh-deep-dive.html" />
|
|||
|
|
|||
|
|
|||
|
<link rel="prev" href="istio-tutorials-collection.html" />
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<link rel="shortcut icon" href='../favicon.ico' type="image/x-icon">
|
|||
|
|
|||
|
|
|||
|
<link rel="bookmark" href='../favicon.ico' type="image/x-icon">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<style>
|
|||
|
@media only screen and (max-width: 640px) {
|
|||
|
.book-header .hidden-mobile {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|
|||
|
<script>
|
|||
|
window["gitbook-plugin-github-buttons"] = {"repo":"rootsongjc/kubernetes-handbook","types":["star"],"size":"small"};
|
|||
|
</script>
|
|||
|
|
|||
|
</head>
|
|||
|
<body>
|
|||
|
|
|||
|
<div class="book">
|
|||
|
<div class="book-summary">
|
|||
|
|
|||
|
|
|||
|
<div id="book-search-input" role="search">
|
|||
|
<input type="text" placeholder="输入并搜索" />
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
<nav role="navigation">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="summary">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li>
|
|||
|
<a href="https://jimmysong.io" target="_blank" class="custom-link">回到主页</a>
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
<li>
|
|||
|
<a href="https://jimmysong.io/awesome-cloud-native" target="_blank" class="custom-link">Awesome Cloud Native</a>
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
<li>
|
|||
|
<a href="https://cloudnative.to" target="_blank" class="custom-link">云原生社区</a>
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
<li>
|
|||
|
<a href="https://cloudnativeindustryalliance.github.io/whitepaper2020/" target="_blank" class="custom-link">中国云原生发展白皮书2020</a>
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
<li>
|
|||
|
<a href="https://jimmysong.io/guide-to-cloud-native-app/" target="_blank" class="custom-link">云原生应用白皮书</a>
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="divider"></li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">前言</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="1.1" data-path="../">
|
|||
|
|
|||
|
<a href="../">
|
|||
|
|
|||
|
|
|||
|
<b>1.1.</b>
|
|||
|
|
|||
|
序言
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">云原生</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="2.1" data-path="../cloud-native/cloud-native-definition.html">
|
|||
|
|
|||
|
<a href="../cloud-native/cloud-native-definition.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.1.</b>
|
|||
|
|
|||
|
云原生(Cloud Native)的定义
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.2" data-path="../cloud-native/cloud-native-philosophy.html">
|
|||
|
|
|||
|
<a href="../cloud-native/cloud-native-philosophy.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.2.</b>
|
|||
|
|
|||
|
云原生的设计哲学
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.3" data-path="../cloud-native/play-with-kubernetes.html">
|
|||
|
|
|||
|
<a href="../cloud-native/play-with-kubernetes.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.3.</b>
|
|||
|
|
|||
|
Play with Kubernetes
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.4" data-path="../cloud-native/cloud-native-local-quick-start.html">
|
|||
|
|
|||
|
<a href="../cloud-native/cloud-native-local-quick-start.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.4.</b>
|
|||
|
|
|||
|
快速部署一个云原生本地实验环境
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.5" data-path="../cloud-native/setup-kubernetes-with-rancher-and-aliyun.html">
|
|||
|
|
|||
|
<a href="../cloud-native/setup-kubernetes-with-rancher-and-aliyun.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.5.</b>
|
|||
|
|
|||
|
使用 Rancher 在阿里云上部署 Kubenretes 集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.6" data-path="../cloud-native/kubernetes-and-cloud-native-app-overview.html">
|
|||
|
|
|||
|
<a href="../cloud-native/kubernetes-and-cloud-native-app-overview.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.6.</b>
|
|||
|
|
|||
|
Kubernetes 与云原生应用概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.7" data-path="../cloud-native/from-kubernetes-to-cloud-native.html">
|
|||
|
|
|||
|
<a href="../cloud-native/from-kubernetes-to-cloud-native.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.7.</b>
|
|||
|
|
|||
|
云原生应用之路 —— 从 Kubernetes 到 Cloud Native
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.8" data-path="../cloud-native/cloud-native-programming-languages.html">
|
|||
|
|
|||
|
<a href="../cloud-native/cloud-native-programming-languages.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.8.</b>
|
|||
|
|
|||
|
云原生编程语言
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="2.8.1" data-path="../cloud-native/cloud-native-programming-language-ballerina.html">
|
|||
|
|
|||
|
<a href="../cloud-native/cloud-native-programming-language-ballerina.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.8.1.</b>
|
|||
|
|
|||
|
云原生编程语言 Ballerina
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.8.2" data-path="../cloud-native/cloud-native-programming-language-pulumi.html">
|
|||
|
|
|||
|
<a href="../cloud-native/cloud-native-programming-language-pulumi.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.8.2.</b>
|
|||
|
|
|||
|
云原生编程语言 Pulumi
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.9" data-path="../cloud-native/the-future-of-cloud-native.html">
|
|||
|
|
|||
|
<a href="../cloud-native/the-future-of-cloud-native.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.9.</b>
|
|||
|
|
|||
|
云原生的未来
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.10" data-path="../cloud-native/define-cloud-native-app.html">
|
|||
|
|
|||
|
<a href="../cloud-native/define-cloud-native-app.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.10.</b>
|
|||
|
|
|||
|
定义云原生应用
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="2.10.1" data-path="../cloud-native/workload.html">
|
|||
|
|
|||
|
<a href="../cloud-native/workload.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.10.1.</b>
|
|||
|
|
|||
|
Workload
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.10.2" data-path="../cloud-native/component.html">
|
|||
|
|
|||
|
<a href="../cloud-native/component.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.10.2.</b>
|
|||
|
|
|||
|
Component
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.10.3" data-path="../cloud-native/trait.html">
|
|||
|
|
|||
|
<a href="../cloud-native/trait.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.10.3.</b>
|
|||
|
|
|||
|
Trait
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.10.4" data-path="../cloud-native/application-scope.html">
|
|||
|
|
|||
|
<a href="../cloud-native/application-scope.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.10.4.</b>
|
|||
|
|
|||
|
Application Scope
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.10.5" data-path="../cloud-native/application-configuration.html">
|
|||
|
|
|||
|
<a href="../cloud-native/application-configuration.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.10.5.</b>
|
|||
|
|
|||
|
Application Configuration
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">概念与原理</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1" data-path="../concepts/">
|
|||
|
|
|||
|
<a href="../concepts/">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.</b>
|
|||
|
|
|||
|
Kubernetes 架构
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1.1" data-path="../concepts/concepts.html">
|
|||
|
|
|||
|
<a href="../concepts/concepts.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.1.</b>
|
|||
|
|
|||
|
设计理念
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1.2" data-path="../concepts/etcd.html">
|
|||
|
|
|||
|
<a href="../concepts/etcd.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.2.</b>
|
|||
|
|
|||
|
Etcd 解析
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1.3" data-path="../concepts/open-interfaces.html">
|
|||
|
|
|||
|
<a href="../concepts/open-interfaces.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.3.</b>
|
|||
|
|
|||
|
开放接口
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1.3.1" data-path="../concepts/cri.html">
|
|||
|
|
|||
|
<a href="../concepts/cri.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.3.1.</b>
|
|||
|
|
|||
|
CRI - Container Runtime Interface(容器运行时接口)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1.3.2" data-path="../concepts/cni.html">
|
|||
|
|
|||
|
<a href="../concepts/cni.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.3.2.</b>
|
|||
|
|
|||
|
CNI - Container Network Interface(容器网络接口)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1.3.3" data-path="../concepts/csi.html">
|
|||
|
|
|||
|
<a href="../concepts/csi.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.3.3.</b>
|
|||
|
|
|||
|
CSI - Container Storage Interface(容器存储接口)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.2" data-path="../concepts/networking.html">
|
|||
|
|
|||
|
<a href="../concepts/networking.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.2.</b>
|
|||
|
|
|||
|
Kubernetes 中的网络
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.2.1" data-path="../concepts/flannel.html">
|
|||
|
|
|||
|
<a href="../concepts/flannel.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.2.1.</b>
|
|||
|
|
|||
|
Kubernetes 中的网络解析 —— 以 flannel 为例
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.2.2" data-path="../concepts/calico.html">
|
|||
|
|
|||
|
<a href="../concepts/calico.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.2.2.</b>
|
|||
|
|
|||
|
Kubernetes 中的网络解析 —— 以 calico 为例
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.2.3" data-path="../concepts/cilium.html">
|
|||
|
|
|||
|
<a href="../concepts/cilium.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.2.3.</b>
|
|||
|
|
|||
|
具备 API 感知的网络和安全性管理开源软件 Cilium
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.2.3.1" data-path="../concepts/cilium-concepts.html">
|
|||
|
|
|||
|
<a href="../concepts/cilium-concepts.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.2.3.1.</b>
|
|||
|
|
|||
|
Cilium 架构设计与概念解析
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.3" data-path="../concepts/objects.html">
|
|||
|
|
|||
|
<a href="../concepts/objects.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.3.</b>
|
|||
|
|
|||
|
资源对象与基本概念解析
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4" data-path="../concepts/pod-state-and-lifecycle.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-state-and-lifecycle.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.</b>
|
|||
|
|
|||
|
Pod 状态与生命周期管理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.1" data-path="../concepts/pod-overview.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-overview.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.1.</b>
|
|||
|
|
|||
|
Pod 概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.2" data-path="../concepts/pod.html">
|
|||
|
|
|||
|
<a href="../concepts/pod.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.2.</b>
|
|||
|
|
|||
|
Pod 解析
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.3" data-path="../concepts/init-containers.html">
|
|||
|
|
|||
|
<a href="../concepts/init-containers.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.3.</b>
|
|||
|
|
|||
|
Init 容器
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.4" data-path="../concepts/pause-container.html">
|
|||
|
|
|||
|
<a href="../concepts/pause-container.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.4.</b>
|
|||
|
|
|||
|
Pause 容器
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.5" data-path="../concepts/pod-security-policy.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-security-policy.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.5.</b>
|
|||
|
|
|||
|
Pod 安全策略
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.6" data-path="../concepts/pod-lifecycle.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-lifecycle.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.6.</b>
|
|||
|
|
|||
|
Pod 的生命周期
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.7" data-path="../concepts/pod-hook.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-hook.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.7.</b>
|
|||
|
|
|||
|
Pod Hook
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.8" data-path="../concepts/pod-preset.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-preset.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.8.</b>
|
|||
|
|
|||
|
Pod Preset
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.9" data-path="../concepts/pod-disruption-budget.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-disruption-budget.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.9.</b>
|
|||
|
|
|||
|
Pod 中断与 PDB(Pod 中断预算)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5" data-path="../concepts/cluster.html">
|
|||
|
|
|||
|
<a href="../concepts/cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.</b>
|
|||
|
|
|||
|
集群资源管理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5.1" data-path="../concepts/node.html">
|
|||
|
|
|||
|
<a href="../concepts/node.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.1.</b>
|
|||
|
|
|||
|
Node
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5.2" data-path="../concepts/namespace.html">
|
|||
|
|
|||
|
<a href="../concepts/namespace.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.2.</b>
|
|||
|
|
|||
|
Namespace
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5.3" data-path="../concepts/label.html">
|
|||
|
|
|||
|
<a href="../concepts/label.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.3.</b>
|
|||
|
|
|||
|
Label
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5.4" data-path="../concepts/annotation.html">
|
|||
|
|
|||
|
<a href="../concepts/annotation.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.4.</b>
|
|||
|
|
|||
|
Annotation
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5.5" data-path="../concepts/taint-and-toleration.html">
|
|||
|
|
|||
|
<a href="../concepts/taint-and-toleration.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.5.</b>
|
|||
|
|
|||
|
Taint 和 Toleration(污点和容忍)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5.6" data-path="../concepts/garbage-collection.html">
|
|||
|
|
|||
|
<a href="../concepts/garbage-collection.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.6.</b>
|
|||
|
|
|||
|
垃圾收集
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6" data-path="../concepts/controllers.html">
|
|||
|
|
|||
|
<a href="../concepts/controllers.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.</b>
|
|||
|
|
|||
|
控制器
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.1" data-path="../concepts/deployment.html">
|
|||
|
|
|||
|
<a href="../concepts/deployment.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.1.</b>
|
|||
|
|
|||
|
Deployment
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.2" data-path="../concepts/statefulset.html">
|
|||
|
|
|||
|
<a href="../concepts/statefulset.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.2.</b>
|
|||
|
|
|||
|
StatefulSet
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.3" data-path="../concepts/daemonset.html">
|
|||
|
|
|||
|
<a href="../concepts/daemonset.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.3.</b>
|
|||
|
|
|||
|
DaemonSet
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.4" data-path="../concepts/replicaset.html">
|
|||
|
|
|||
|
<a href="../concepts/replicaset.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.4.</b>
|
|||
|
|
|||
|
ReplicationController 和 ReplicaSet
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.5" data-path="../concepts/job.html">
|
|||
|
|
|||
|
<a href="../concepts/job.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.5.</b>
|
|||
|
|
|||
|
Job
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.6" data-path="../concepts/cronjob.html">
|
|||
|
|
|||
|
<a href="../concepts/cronjob.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.6.</b>
|
|||
|
|
|||
|
CronJob
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.7" data-path="../concepts/horizontal-pod-autoscaling.html">
|
|||
|
|
|||
|
<a href="../concepts/horizontal-pod-autoscaling.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.7.</b>
|
|||
|
|
|||
|
Horizontal Pod Autoscaling
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.7.1" data-path="../concepts/custom-metrics-hpa.html">
|
|||
|
|
|||
|
<a href="../concepts/custom-metrics-hpa.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.7.1.</b>
|
|||
|
|
|||
|
自定义指标 HPA
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.8" data-path="../concepts/admission-controller.html">
|
|||
|
|
|||
|
<a href="../concepts/admission-controller.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.8.</b>
|
|||
|
|
|||
|
准入控制器(Admission Controller)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.7" data-path="../concepts/service-discovery.html">
|
|||
|
|
|||
|
<a href="../concepts/service-discovery.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.7.</b>
|
|||
|
|
|||
|
服务发现
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.7.1" data-path="../concepts/service.html">
|
|||
|
|
|||
|
<a href="../concepts/service.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.7.1.</b>
|
|||
|
|
|||
|
Service
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.7.2" data-path="../concepts/ingress.html">
|
|||
|
|
|||
|
<a href="../concepts/ingress.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.7.2.</b>
|
|||
|
|
|||
|
Ingress
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.7.2.1" data-path="../concepts/traefik-ingress-controller.html">
|
|||
|
|
|||
|
<a href="../concepts/traefik-ingress-controller.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.7.2.1.</b>
|
|||
|
|
|||
|
Traefik Ingress Controller
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.8" data-path="../concepts/authentication-and-permission.html">
|
|||
|
|
|||
|
<a href="../concepts/authentication-and-permission.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.8.</b>
|
|||
|
|
|||
|
身份与权限控制
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.8.1" data-path="../concepts/serviceaccount.html">
|
|||
|
|
|||
|
<a href="../concepts/serviceaccount.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.8.1.</b>
|
|||
|
|
|||
|
ServiceAccount
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.8.2" data-path="../concepts/rbac.html">
|
|||
|
|
|||
|
<a href="../concepts/rbac.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.8.2.</b>
|
|||
|
|
|||
|
RBAC—— 基于角色的访问控制
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.8.3" data-path="../concepts/network-policy.html">
|
|||
|
|
|||
|
<a href="../concepts/network-policy.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.8.3.</b>
|
|||
|
|
|||
|
NetworkPolicy
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9" data-path="../concepts/storage.html">
|
|||
|
|
|||
|
<a href="../concepts/storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.</b>
|
|||
|
|
|||
|
存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.1" data-path="../concepts/secret.html">
|
|||
|
|
|||
|
<a href="../concepts/secret.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.1.</b>
|
|||
|
|
|||
|
Secret
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.2" data-path="../concepts/configmap.html">
|
|||
|
|
|||
|
<a href="../concepts/configmap.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.2.</b>
|
|||
|
|
|||
|
ConfigMap
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.2.1" data-path="../concepts/configmap-hot-update.html">
|
|||
|
|
|||
|
<a href="../concepts/configmap-hot-update.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.2.1.</b>
|
|||
|
|
|||
|
ConfigMap 的热更新
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.3" data-path="../concepts/volume.html">
|
|||
|
|
|||
|
<a href="../concepts/volume.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.3.</b>
|
|||
|
|
|||
|
Volume
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.4" data-path="../concepts/persistent-volume.html">
|
|||
|
|
|||
|
<a href="../concepts/persistent-volume.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.4.</b>
|
|||
|
|
|||
|
Persistent Volume(持久化卷)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.5" data-path="../concepts/storageclass.html">
|
|||
|
|
|||
|
<a href="../concepts/storageclass.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.5.</b>
|
|||
|
|
|||
|
Storage Class
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.6" data-path="../concepts/local-persistent-storage.html">
|
|||
|
|
|||
|
<a href="../concepts/local-persistent-storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.6.</b>
|
|||
|
|
|||
|
本地持久化存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.10" data-path="../concepts/extension.html">
|
|||
|
|
|||
|
<a href="../concepts/extension.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.10.</b>
|
|||
|
|
|||
|
集群扩展
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.10.1" data-path="../concepts/custom-resource.html">
|
|||
|
|
|||
|
<a href="../concepts/custom-resource.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.10.1.</b>
|
|||
|
|
|||
|
使用自定义资源扩展 API
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.10.2" data-path="../concepts/crd.html">
|
|||
|
|
|||
|
<a href="../concepts/crd.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.10.2.</b>
|
|||
|
|
|||
|
使用 CRD 扩展 Kubernetes API
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.10.3" data-path="../concepts/aggregated-api-server.html">
|
|||
|
|
|||
|
<a href="../concepts/aggregated-api-server.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.10.3.</b>
|
|||
|
|
|||
|
Aggregated API Server
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.10.4" data-path="../concepts/apiservice.html">
|
|||
|
|
|||
|
<a href="../concepts/apiservice.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.10.4.</b>
|
|||
|
|
|||
|
APIService
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.10.5" data-path="../concepts/service-catalog.html">
|
|||
|
|
|||
|
<a href="../concepts/service-catalog.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.10.5.</b>
|
|||
|
|
|||
|
Service Catalog
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.11" data-path="../concepts/scheduling.html">
|
|||
|
|
|||
|
<a href="../concepts/scheduling.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.11.</b>
|
|||
|
|
|||
|
资源调度
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.11.1" data-path="../concepts/qos.html">
|
|||
|
|
|||
|
<a href="../concepts/qos.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.11.1.</b>
|
|||
|
|
|||
|
QoS(服务质量等级)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">用户指南</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="4.1" data-path="../guide/">
|
|||
|
|
|||
|
<a href="../guide/">
|
|||
|
|
|||
|
|
|||
|
<b>4.1.</b>
|
|||
|
|
|||
|
用户指南
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.2" data-path="../guide/resource-configuration.html">
|
|||
|
|
|||
|
<a href="../guide/resource-configuration.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.2.</b>
|
|||
|
|
|||
|
资源对象配置
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="4.2.1" data-path="../guide/configure-liveness-readiness-probes.html">
|
|||
|
|
|||
|
<a href="../guide/configure-liveness-readiness-probes.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.2.1.</b>
|
|||
|
|
|||
|
配置 Pod 的 liveness 和 readiness 探针
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.2.2" data-path="../guide/configure-pod-service-account.html">
|
|||
|
|
|||
|
<a href="../guide/configure-pod-service-account.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.2.2.</b>
|
|||
|
|
|||
|
配置 Pod 的 Service Account
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.2.3" data-path="../guide/secret-configuration.html">
|
|||
|
|
|||
|
<a href="../guide/secret-configuration.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.2.3.</b>
|
|||
|
|
|||
|
Secret 配置
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.2.4" data-path="../guide/resource-quota-management.html">
|
|||
|
|
|||
|
<a href="../guide/resource-quota-management.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.2.4.</b>
|
|||
|
|
|||
|
管理 namespace 中的资源配额
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.3" data-path="../guide/command-usage.html">
|
|||
|
|
|||
|
<a href="../guide/command-usage.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.3.</b>
|
|||
|
|
|||
|
命令使用
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="4.3.1" data-path="../guide/docker-cli-to-kubectl.html">
|
|||
|
|
|||
|
<a href="../guide/docker-cli-to-kubectl.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.3.1.</b>
|
|||
|
|
|||
|
Docker 用户过渡到 kubectl 命令行指南
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.3.2" data-path="../guide/using-kubectl.html">
|
|||
|
|
|||
|
<a href="../guide/using-kubectl.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.3.2.</b>
|
|||
|
|
|||
|
kubectl 命令概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.3.3" data-path="../guide/kubectl-cheatsheet.html">
|
|||
|
|
|||
|
<a href="../guide/kubectl-cheatsheet.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.3.3.</b>
|
|||
|
|
|||
|
kubectl 命令技巧大全
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.3.4" data-path="../guide/using-etcdctl-to-access-kubernetes-data.html">
|
|||
|
|
|||
|
<a href="../guide/using-etcdctl-to-access-kubernetes-data.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.3.4.</b>
|
|||
|
|
|||
|
使用 etcdctl 访问 kubernetes 数据
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4" data-path="../guide/cluster-security-management.html">
|
|||
|
|
|||
|
<a href="../guide/cluster-security-management.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.</b>
|
|||
|
|
|||
|
集群安全性管理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.1" data-path="../guide/managing-tls-in-a-cluster.html">
|
|||
|
|
|||
|
<a href="../guide/managing-tls-in-a-cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.1.</b>
|
|||
|
|
|||
|
管理集群中的 TLS
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.2" data-path="../guide/kubelet-authentication-authorization.html">
|
|||
|
|
|||
|
<a href="../guide/kubelet-authentication-authorization.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.2.</b>
|
|||
|
|
|||
|
kubelet 的认证授权
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.3" data-path="../guide/tls-bootstrapping.html">
|
|||
|
|
|||
|
<a href="../guide/tls-bootstrapping.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.3.</b>
|
|||
|
|
|||
|
TLS bootstrap
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.4" data-path="../guide/kubectl-user-authentication-authorization.html">
|
|||
|
|
|||
|
<a href="../guide/kubectl-user-authentication-authorization.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.4.</b>
|
|||
|
|
|||
|
创建用户认证授权的 kubeconfig 文件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.5" data-path="../guide/ip-masq-agent.html">
|
|||
|
|
|||
|
<a href="../guide/ip-masq-agent.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.5.</b>
|
|||
|
|
|||
|
IP 伪装代理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.6" data-path="../guide/auth-with-kubeconfig-or-token.html">
|
|||
|
|
|||
|
<a href="../guide/auth-with-kubeconfig-or-token.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.6.</b>
|
|||
|
|
|||
|
使用 kubeconfig 或 token 进行用户身份认证
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.7" data-path="../guide/authentication.html">
|
|||
|
|
|||
|
<a href="../guide/authentication.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.7.</b>
|
|||
|
|
|||
|
Kubernetes 中的用户与身份认证授权
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.8" data-path="../guide/kubernetes-security-best-practice.html">
|
|||
|
|
|||
|
<a href="../guide/kubernetes-security-best-practice.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.8.</b>
|
|||
|
|
|||
|
Kubernetes 集群安全性配置最佳实践
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5" data-path="../guide/access-kubernetes-cluster.html">
|
|||
|
|
|||
|
<a href="../guide/access-kubernetes-cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.</b>
|
|||
|
|
|||
|
访问 Kubernetes 集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.1" data-path="../guide/access-cluster.html">
|
|||
|
|
|||
|
<a href="../guide/access-cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.1.</b>
|
|||
|
|
|||
|
访问集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.2" data-path="../guide/authenticate-across-clusters-kubeconfig.html">
|
|||
|
|
|||
|
<a href="../guide/authenticate-across-clusters-kubeconfig.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.2.</b>
|
|||
|
|
|||
|
使用 kubeconfig 文件配置跨集群认证
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.3" data-path="../guide/connecting-to-applications-port-forward.html">
|
|||
|
|
|||
|
<a href="../guide/connecting-to-applications-port-forward.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.3.</b>
|
|||
|
|
|||
|
通过端口转发访问集群中的应用程序
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.4" data-path="../guide/service-access-application-cluster.html">
|
|||
|
|
|||
|
<a href="../guide/service-access-application-cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.4.</b>
|
|||
|
|
|||
|
使用 service 访问群集中的应用程序
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.5" data-path="../guide/accessing-kubernetes-pods-from-outside-of-the-cluster.html">
|
|||
|
|
|||
|
<a href="../guide/accessing-kubernetes-pods-from-outside-of-the-cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.5.</b>
|
|||
|
|
|||
|
从外部访问 Kubernetes 中的 Pod
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.6" data-path="../guide/cabin-mobile-dashboard-for-kubernetes.html">
|
|||
|
|
|||
|
<a href="../guide/cabin-mobile-dashboard-for-kubernetes.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.6.</b>
|
|||
|
|
|||
|
Cabin - Kubernetes 手机客户端
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.7" data-path="../guide/kubernetes-desktop-client.html">
|
|||
|
|
|||
|
<a href="../guide/kubernetes-desktop-client.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.7.</b>
|
|||
|
|
|||
|
Kubernetic - Kubernetes 桌面客户端
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.8" data-path="../guide/kubernator-kubernetes-ui.html">
|
|||
|
|
|||
|
<a href="../guide/kubernator-kubernetes-ui.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.8.</b>
|
|||
|
|
|||
|
Kubernator - 更底层的 Kubernetes UI
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.6" data-path="../guide/application-development-deployment-flow.html">
|
|||
|
|
|||
|
<a href="../guide/application-development-deployment-flow.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.6.</b>
|
|||
|
|
|||
|
在 Kubernetes 中开发部署应用
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="4.6.1" data-path="../guide/deploy-applications-in-kubernetes.html">
|
|||
|
|
|||
|
<a href="../guide/deploy-applications-in-kubernetes.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.6.1.</b>
|
|||
|
|
|||
|
适用于 kubernetes 的应用开发部署流程
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.6.2" data-path="../guide/migrating-hadoop-yarn-to-kubernetes.html">
|
|||
|
|
|||
|
<a href="../guide/migrating-hadoop-yarn-to-kubernetes.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.6.2.</b>
|
|||
|
|
|||
|
迁移传统应用到 Kubernetes 中 —— 以 Hadoop YARN 为例
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.6.3" data-path="../guide/using-statefulset.html">
|
|||
|
|
|||
|
<a href="../guide/using-statefulset.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.6.3.</b>
|
|||
|
|
|||
|
使用 StatefulSet 部署用状态应用
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">最佳实践</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.1" data-path="../practice/">
|
|||
|
|
|||
|
<a href="../practice/">
|
|||
|
|
|||
|
|
|||
|
<b>5.1.</b>
|
|||
|
|
|||
|
最佳实践概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2" data-path="../practice/install-kubernetes-on-centos.html">
|
|||
|
|
|||
|
<a href="../practice/install-kubernetes-on-centos.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.</b>
|
|||
|
|
|||
|
在 CentOS 上部署 Kubernetes 集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.1" data-path="../practice/create-tls-and-secret-key.html">
|
|||
|
|
|||
|
<a href="../practice/create-tls-and-secret-key.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.1.</b>
|
|||
|
|
|||
|
创建 TLS 证书和秘钥
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.2" data-path="../practice/create-kubeconfig.html">
|
|||
|
|
|||
|
<a href="../practice/create-kubeconfig.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.2.</b>
|
|||
|
|
|||
|
创建 kubeconfig 文件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.3" data-path="../practice/etcd-cluster-installation.html">
|
|||
|
|
|||
|
<a href="../practice/etcd-cluster-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.3.</b>
|
|||
|
|
|||
|
创建高可用 etcd 集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.4" data-path="../practice/kubectl-installation.html">
|
|||
|
|
|||
|
<a href="../practice/kubectl-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.4.</b>
|
|||
|
|
|||
|
安装 kubectl 命令行工具
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.5" data-path="../practice/master-installation.html">
|
|||
|
|
|||
|
<a href="../practice/master-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.5.</b>
|
|||
|
|
|||
|
部署 master 节点
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.6" data-path="../practice/flannel-installation.html">
|
|||
|
|
|||
|
<a href="../practice/flannel-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.6.</b>
|
|||
|
|
|||
|
安装 flannel 网络插件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.7" data-path="../practice/node-installation.html">
|
|||
|
|
|||
|
<a href="../practice/node-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.7.</b>
|
|||
|
|
|||
|
部署 node 节点
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.8" data-path="../practice/kubedns-addon-installation.html">
|
|||
|
|
|||
|
<a href="../practice/kubedns-addon-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.8.</b>
|
|||
|
|
|||
|
安装 kubedns 插件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.9" data-path="../practice/dashboard-addon-installation.html">
|
|||
|
|
|||
|
<a href="../practice/dashboard-addon-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.9.</b>
|
|||
|
|
|||
|
安装 dashboard 插件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.10" data-path="../practice/heapster-addon-installation.html">
|
|||
|
|
|||
|
<a href="../practice/heapster-addon-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.10.</b>
|
|||
|
|
|||
|
安装 heapster 插件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.11" data-path="../practice/efk-addon-installation.html">
|
|||
|
|
|||
|
<a href="../practice/efk-addon-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.11.</b>
|
|||
|
|
|||
|
安装 EFK 插件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.3" data-path="../practice/install-kubernetes-with-kubeadm.html">
|
|||
|
|
|||
|
<a href="../practice/install-kubernetes-with-kubeadm.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.3.</b>
|
|||
|
|
|||
|
生产级的 Kubernetes 简化管理工具 kubeadm
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.3.1" data-path="../practice/install-kubernetes-on-ubuntu-server-16.04-with-kubeadm.html">
|
|||
|
|
|||
|
<a href="../practice/install-kubernetes-on-ubuntu-server-16.04-with-kubeadm.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.3.1.</b>
|
|||
|
|
|||
|
使用 kubeadm 在 Ubuntu Server 16.04 上快速构建测试集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4" data-path="../practice/service-discovery-and-loadbalancing.html">
|
|||
|
|
|||
|
<a href="../practice/service-discovery-and-loadbalancing.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.</b>
|
|||
|
|
|||
|
服务发现与负载均衡
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.1" data-path="../practice/traefik-ingress-installation.html">
|
|||
|
|
|||
|
<a href="../practice/traefik-ingress-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.1.</b>
|
|||
|
|
|||
|
安装 Traefik ingress
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.2" data-path="../practice/distributed-load-test.html">
|
|||
|
|
|||
|
<a href="../practice/distributed-load-test.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.2.</b>
|
|||
|
|
|||
|
分布式负载测试
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.3" data-path="../practice/network-and-cluster-perfermance-test.html">
|
|||
|
|
|||
|
<a href="../practice/network-and-cluster-perfermance-test.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.3.</b>
|
|||
|
|
|||
|
网络和集群性能测试
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.4" data-path="../practice/edge-node-configuration.html">
|
|||
|
|
|||
|
<a href="../practice/edge-node-configuration.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.4.</b>
|
|||
|
|
|||
|
边缘节点配置
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.5" data-path="../practice/nginx-ingress-installation.html">
|
|||
|
|
|||
|
<a href="../practice/nginx-ingress-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.5.</b>
|
|||
|
|
|||
|
安装 Nginx ingress
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.6" data-path="../practice/dns-installation.html">
|
|||
|
|
|||
|
<a href="../practice/dns-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.6.</b>
|
|||
|
|
|||
|
安装配置 DNS
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.6.1" data-path="../practice/configuring-dns.html">
|
|||
|
|
|||
|
<a href="../practice/configuring-dns.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.6.1.</b>
|
|||
|
|
|||
|
安装配置 Kube-dns
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.6.2" data-path="../practice/coredns.html">
|
|||
|
|
|||
|
<a href="../practice/coredns.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.6.2.</b>
|
|||
|
|
|||
|
安装配置 CoreDNS
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5" data-path="../practice/operation.html">
|
|||
|
|
|||
|
<a href="../practice/operation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.</b>
|
|||
|
|
|||
|
运维管理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.1" data-path="../practice/master-ha.html">
|
|||
|
|
|||
|
<a href="../practice/master-ha.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.1.</b>
|
|||
|
|
|||
|
Master 节点高可用
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.2" data-path="../practice/service-rolling-update.html">
|
|||
|
|
|||
|
<a href="../practice/service-rolling-update.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.2.</b>
|
|||
|
|
|||
|
服务滚动升级
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.3" data-path="../practice/app-log-collection.html">
|
|||
|
|
|||
|
<a href="../practice/app-log-collection.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.3.</b>
|
|||
|
|
|||
|
应用日志收集
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.4" data-path="../practice/configuration-best-practice.html">
|
|||
|
|
|||
|
<a href="../practice/configuration-best-practice.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.4.</b>
|
|||
|
|
|||
|
配置最佳实践
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.5" data-path="../practice/monitor.html">
|
|||
|
|
|||
|
<a href="../practice/monitor.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.5.</b>
|
|||
|
|
|||
|
集群及应用监控
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.6" data-path="../practice/data-persistence-problem.html">
|
|||
|
|
|||
|
<a href="../practice/data-persistence-problem.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.6.</b>
|
|||
|
|
|||
|
数据持久化问题
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.7" data-path="../practice/manage-compute-resources-container.html">
|
|||
|
|
|||
|
<a href="../practice/manage-compute-resources-container.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.7.</b>
|
|||
|
|
|||
|
管理容器的计算资源
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.8" data-path="../practice/federation.html">
|
|||
|
|
|||
|
<a href="../practice/federation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.8.</b>
|
|||
|
|
|||
|
集群联邦
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6" data-path="../practice/storage.html">
|
|||
|
|
|||
|
<a href="../practice/storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.</b>
|
|||
|
|
|||
|
存储管理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.1" data-path="../practice/glusterfs.html">
|
|||
|
|
|||
|
<a href="../practice/glusterfs.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.1.</b>
|
|||
|
|
|||
|
GlusterFS
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.1.1" data-path="../practice/using-glusterfs-for-persistent-storage.html">
|
|||
|
|
|||
|
<a href="../practice/using-glusterfs-for-persistent-storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.1.1.</b>
|
|||
|
|
|||
|
使用 GlusterFS 做持久化存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.1.2" data-path="../practice/using-heketi-gluster-for-persistent-storage.html">
|
|||
|
|
|||
|
<a href="../practice/using-heketi-gluster-for-persistent-storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.1.2.</b>
|
|||
|
|
|||
|
使用 Heketi 作为 Kubernetes 的持久存储 GlusterFS 的 external provisioner
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.1.3" data-path="../practice/storage-for-containers-using-glusterfs-with-openshift.html">
|
|||
|
|
|||
|
<a href="../practice/storage-for-containers-using-glusterfs-with-openshift.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.1.3.</b>
|
|||
|
|
|||
|
在 OpenShift 中使用 GlusterFS 做持久化存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.2" data-path="../practice/glusterd-2.0.html">
|
|||
|
|
|||
|
<a href="../practice/glusterd-2.0.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.2.</b>
|
|||
|
|
|||
|
GlusterD-2.0
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.3" data-path="../practice/ceph.html">
|
|||
|
|
|||
|
<a href="../practice/ceph.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.3.</b>
|
|||
|
|
|||
|
Ceph
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.3.1" data-path="../practice/ceph-helm-install-guide-zh.html">
|
|||
|
|
|||
|
<a href="../practice/ceph-helm-install-guide-zh.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.3.1.</b>
|
|||
|
|
|||
|
用 Helm 托管安装 Ceph 集群并提供后端存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.3.2" data-path="../practice/using-ceph-for-persistent-storage.html">
|
|||
|
|
|||
|
<a href="../practice/using-ceph-for-persistent-storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.3.2.</b>
|
|||
|
|
|||
|
使用 Ceph 做持久化存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.3.3" data-path="../practice/rbd-provisioner.html">
|
|||
|
|
|||
|
<a href="../practice/rbd-provisioner.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.3.3.</b>
|
|||
|
|
|||
|
使用 rbd-provisioner 提供 rbd 持久化存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.4" data-path="../practice/openebs.html">
|
|||
|
|
|||
|
<a href="../practice/openebs.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.4.</b>
|
|||
|
|
|||
|
OpenEBS
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.4.1" data-path="../practice/using-openebs-for-persistent-storage.html">
|
|||
|
|
|||
|
<a href="../practice/using-openebs-for-persistent-storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.4.1.</b>
|
|||
|
|
|||
|
使用 OpenEBS 做持久化存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.5" data-path="../practice/rook.html">
|
|||
|
|
|||
|
<a href="../practice/rook.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.5.</b>
|
|||
|
|
|||
|
Rook
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.6" data-path="../practice/nfs.html">
|
|||
|
|
|||
|
<a href="../practice/nfs.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.6.</b>
|
|||
|
|
|||
|
NFS
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.6.1" data-path="../practice/using-nfs-for-persistent-storage.html">
|
|||
|
|
|||
|
<a href="../practice/using-nfs-for-persistent-storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.6.1.</b>
|
|||
|
|
|||
|
利用 NFS 动态提供 Kubernetes 后端存储卷
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.7" data-path="../practice/monitoring.html">
|
|||
|
|
|||
|
<a href="../practice/monitoring.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.7.</b>
|
|||
|
|
|||
|
集群与应用监控
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.7.1" data-path="../practice/heapster.html">
|
|||
|
|
|||
|
<a href="../practice/heapster.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.7.1.</b>
|
|||
|
|
|||
|
Heapster
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.7.1.1" data-path="../practice/using-heapster-to-get-object-metrics.html">
|
|||
|
|
|||
|
<a href="../practice/using-heapster-to-get-object-metrics.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.7.1.1.</b>
|
|||
|
|
|||
|
使用 Heapster 获取集群和对象的 metric 数据
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.7.2" data-path="../practice/prometheus.html">
|
|||
|
|
|||
|
<a href="../practice/prometheus.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.7.2.</b>
|
|||
|
|
|||
|
Prometheus
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.7.2.1" data-path="../practice/using-prometheus-to-monitor-kuberentes-cluster.html">
|
|||
|
|
|||
|
<a href="../practice/using-prometheus-to-monitor-kuberentes-cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.7.2.1.</b>
|
|||
|
|
|||
|
使用 Prometheus 监控 kubernetes 集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.7.2.2" data-path="../practice/promql.html">
|
|||
|
|
|||
|
<a href="../practice/promql.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.7.2.2.</b>
|
|||
|
|
|||
|
Prometheus 查询语言 PromQL 使用说明
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.7.3" data-path="../practice/vistio-visualize-your-istio-mesh.html">
|
|||
|
|
|||
|
<a href="../practice/vistio-visualize-your-istio-mesh.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.7.3.</b>
|
|||
|
|
|||
|
使用 Vistio 监控 Istio 服务网格中的流量
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.8" data-path="../practice/distributed-tracing.html">
|
|||
|
|
|||
|
<a href="../practice/distributed-tracing.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.8.</b>
|
|||
|
|
|||
|
分布式跟踪
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.8.1" data-path="../practice/opentracing.html">
|
|||
|
|
|||
|
<a href="../practice/opentracing.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.8.1.</b>
|
|||
|
|
|||
|
OpenTracing
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.9" data-path="../practice/services-management-tool.html">
|
|||
|
|
|||
|
<a href="../practice/services-management-tool.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.9.</b>
|
|||
|
|
|||
|
服务编排管理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.9.1" data-path="../practice/helm.html">
|
|||
|
|
|||
|
<a href="../practice/helm.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.9.1.</b>
|
|||
|
|
|||
|
使用 Helm 管理 Kubernetes 应用
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.9.2" data-path="../practice/create-private-charts-repo.html">
|
|||
|
|
|||
|
<a href="../practice/create-private-charts-repo.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.9.2.</b>
|
|||
|
|
|||
|
构建私有 Chart 仓库
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.10" data-path="../practice/ci-cd.html">
|
|||
|
|
|||
|
<a href="../practice/ci-cd.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.10.</b>
|
|||
|
|
|||
|
持续集成与发布
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.10.1" data-path="../practice/jenkins-ci-cd.html">
|
|||
|
|
|||
|
<a href="../practice/jenkins-ci-cd.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.10.1.</b>
|
|||
|
|
|||
|
使用 Jenkins 进行持续集成与发布
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.10.2" data-path="../practice/drone-ci-cd.html">
|
|||
|
|
|||
|
<a href="../practice/drone-ci-cd.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.10.2.</b>
|
|||
|
|
|||
|
使用 Drone 进行持续集成与发布
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.11" data-path="../practice/update-and-upgrade.html">
|
|||
|
|
|||
|
<a href="../practice/update-and-upgrade.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.11.</b>
|
|||
|
|
|||
|
更新与升级
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.11.1" data-path="../practice/manually-upgrade.html">
|
|||
|
|
|||
|
<a href="../practice/manually-upgrade.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.11.1.</b>
|
|||
|
|
|||
|
手动升级 Kubernetes 集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.11.2" data-path="../practice/dashboard-upgrade.html">
|
|||
|
|
|||
|
<a href="../practice/dashboard-upgrade.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.11.2.</b>
|
|||
|
|
|||
|
升级 dashboard
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.12" data-path="../practice/controller-extended.html">
|
|||
|
|
|||
|
<a href="../practice/controller-extended.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.12.</b>
|
|||
|
|
|||
|
扩展控制器
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.12.1" data-path="../practice/openkruise.html">
|
|||
|
|
|||
|
<a href="../practice/openkruise.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.12.1.</b>
|
|||
|
|
|||
|
OpenKruise
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">领域应用</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.1" data-path="./">
|
|||
|
|
|||
|
<a href="./">
|
|||
|
|
|||
|
|
|||
|
<b>6.1.</b>
|
|||
|
|
|||
|
领域应用概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.2" data-path="microservices.html">
|
|||
|
|
|||
|
<a href="microservices.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.2.</b>
|
|||
|
|
|||
|
微服务架构
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.2.1" data-path="service-discovery-in-microservices.html">
|
|||
|
|
|||
|
<a href="service-discovery-in-microservices.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.2.1.</b>
|
|||
|
|
|||
|
微服务中的服务发现
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.2.2" data-path="microservices-for-java-developers.html">
|
|||
|
|
|||
|
<a href="microservices-for-java-developers.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.2.2.</b>
|
|||
|
|
|||
|
使用 Java 构建微服务并发布到 Kubernetes 平台
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.2.2.1" data-path="spring-boot-quick-start-guide.html">
|
|||
|
|
|||
|
<a href="spring-boot-quick-start-guide.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.2.2.1.</b>
|
|||
|
|
|||
|
Spring Boot 快速开始指南
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3" data-path="service-mesh.html">
|
|||
|
|
|||
|
<a href="service-mesh.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.</b>
|
|||
|
|
|||
|
Service Mesh 服务网格
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.1" data-path="the-enterprise-path-to-service-mesh-architectures.html">
|
|||
|
|
|||
|
<a href="the-enterprise-path-to-service-mesh-architectures.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.</b>
|
|||
|
|
|||
|
企业级服务网格架构
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.1.1" data-path="service-mesh-fundamental.html">
|
|||
|
|
|||
|
<a href="service-mesh-fundamental.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.1.</b>
|
|||
|
|
|||
|
Service Mesh 基础
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.1.2" data-path="comparing-service-mesh-technologies.html">
|
|||
|
|
|||
|
<a href="comparing-service-mesh-technologies.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.2.</b>
|
|||
|
|
|||
|
Service Mesh 技术对比
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.1.3" data-path="service-mesh-adoption-and-evolution.html">
|
|||
|
|
|||
|
<a href="service-mesh-adoption-and-evolution.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.3.</b>
|
|||
|
|
|||
|
采纳和演进
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.1.4" data-path="service-mesh-customization-and-integration.html">
|
|||
|
|
|||
|
<a href="service-mesh-customization-and-integration.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.4.</b>
|
|||
|
|
|||
|
定制和集成
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.1.5" data-path="service-mesh-conclusion.html">
|
|||
|
|
|||
|
<a href="service-mesh-conclusion.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.5.</b>
|
|||
|
|
|||
|
总结
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.2" data-path="istio.html">
|
|||
|
|
|||
|
<a href="istio.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.2.</b>
|
|||
|
|
|||
|
Istio
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.2.1" data-path="istio-installation.html">
|
|||
|
|
|||
|
<a href="istio-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.2.1.</b>
|
|||
|
|
|||
|
安装并试用 Istio service mesh
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.2.2" data-path="sidecar-spec-in-istio.html">
|
|||
|
|
|||
|
<a href="sidecar-spec-in-istio.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.2.2.</b>
|
|||
|
|
|||
|
Istio 中 sidecar 的注入规范及示例
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.2.3" data-path="istio-community-tips.html">
|
|||
|
|
|||
|
<a href="istio-community-tips.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.2.3.</b>
|
|||
|
|
|||
|
如何参与 Istio 社区及注意事项
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.2.4" data-path="istio-tutorials-collection.html">
|
|||
|
|
|||
|
<a href="istio-tutorials-collection.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.2.4.</b>
|
|||
|
|
|||
|
Istio 免费学习资源汇总
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter active" data-level="6.3.2.5" data-path="understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.html">
|
|||
|
|
|||
|
<a href="understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.2.5.</b>
|
|||
|
|
|||
|
Sidecar 的注入与流量劫持
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.2.6" data-path="envoy-sidecar-routing-of-istio-service-mesh-deep-dive.html">
|
|||
|
|
|||
|
<a href="envoy-sidecar-routing-of-istio-service-mesh-deep-dive.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.2.6.</b>
|
|||
|
|
|||
|
Envoy Sidecar 代理的路由转发
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.3" data-path="linkerd.html">
|
|||
|
|
|||
|
<a href="linkerd.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.3.</b>
|
|||
|
|
|||
|
Linkerd
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.3.1" data-path="linkerd-user-guide.html">
|
|||
|
|
|||
|
<a href="linkerd-user-guide.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.3.1.</b>
|
|||
|
|
|||
|
Linkerd 使用指南
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.4" data-path="conduit.html">
|
|||
|
|
|||
|
<a href="conduit.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.4.</b>
|
|||
|
|
|||
|
Conduit
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.4.1" data-path="conduit-overview.html">
|
|||
|
|
|||
|
<a href="conduit-overview.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.4.1.</b>
|
|||
|
|
|||
|
Condiut 概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.4.2" data-path="conduit-installation.html">
|
|||
|
|
|||
|
<a href="conduit-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.4.2.</b>
|
|||
|
|
|||
|
安装 Conduit
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.5" data-path="envoy.html">
|
|||
|
|
|||
|
<a href="envoy.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.5.</b>
|
|||
|
|
|||
|
Envoy
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.5.1" data-path="envoy-terminology.html">
|
|||
|
|
|||
|
<a href="envoy-terminology.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.5.1.</b>
|
|||
|
|
|||
|
Envoy 的架构与基本术语
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.5.2" data-path="envoy-front-proxy.html">
|
|||
|
|
|||
|
<a href="envoy-front-proxy.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.5.2.</b>
|
|||
|
|
|||
|
Envoy 作为前端代理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.5.3" data-path="envoy-mesh-in-kubernetes-tutorial.html">
|
|||
|
|
|||
|
<a href="envoy-mesh-in-kubernetes-tutorial.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.5.3.</b>
|
|||
|
|
|||
|
Envoy mesh 教程
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.6" data-path="mosn.html">
|
|||
|
|
|||
|
<a href="mosn.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.6.</b>
|
|||
|
|
|||
|
MOSN
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.4" data-path="big-data.html">
|
|||
|
|
|||
|
<a href="big-data.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.4.</b>
|
|||
|
|
|||
|
大数据
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.4.1" data-path="spark-standalone-on-kubernetes.html">
|
|||
|
|
|||
|
<a href="spark-standalone-on-kubernetes.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.4.1.</b>
|
|||
|
|
|||
|
Spark standalone on Kubernetes
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.4.2" data-path="running-spark-with-kubernetes-native-scheduler.html">
|
|||
|
|
|||
|
<a href="running-spark-with-kubernetes-native-scheduler.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.4.2.</b>
|
|||
|
|
|||
|
运行支持 Kubernetes 原生调度的 Spark 程序
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.5" data-path="serverless.html">
|
|||
|
|
|||
|
<a href="serverless.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.5.</b>
|
|||
|
|
|||
|
Serverless 架构
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.5.1" data-path="understanding-serverless.html">
|
|||
|
|
|||
|
<a href="understanding-serverless.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.5.1.</b>
|
|||
|
|
|||
|
理解 Serverless
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.5.2" data-path="faas.html">
|
|||
|
|
|||
|
<a href="faas.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.5.2.</b>
|
|||
|
|
|||
|
FaaS(函数即服务)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.5.2.1" data-path="openfaas-quick-start.html">
|
|||
|
|
|||
|
<a href="openfaas-quick-start.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.5.2.1.</b>
|
|||
|
|
|||
|
OpenFaaS 快速入门指南
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.5.3" data-path="knative.html">
|
|||
|
|
|||
|
<a href="knative.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.5.3.</b>
|
|||
|
|
|||
|
Knative
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.6" data-path="cloud-native-app-standard.html">
|
|||
|
|
|||
|
<a href="cloud-native-app-standard.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.6.</b>
|
|||
|
|
|||
|
云原生应用标准
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.6.1" data-path="oam.html">
|
|||
|
|
|||
|
<a href="oam.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.6.1.</b>
|
|||
|
|
|||
|
OAM(开放应用模型)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.7" data-path="edge-computing.html">
|
|||
|
|
|||
|
<a href="edge-computing.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.7.</b>
|
|||
|
|
|||
|
边缘计算
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.8" data-path="ai.html">
|
|||
|
|
|||
|
<a href="ai.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.8.</b>
|
|||
|
|
|||
|
人工智能
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">开发指南</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="7.1" data-path="../develop/">
|
|||
|
|
|||
|
<a href="../develop/">
|
|||
|
|
|||
|
|
|||
|
<b>7.1.</b>
|
|||
|
|
|||
|
开发指南概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.2" data-path="../develop/sigs-and-working-group.html">
|
|||
|
|
|||
|
<a href="../develop/sigs-and-working-group.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.2.</b>
|
|||
|
|
|||
|
SIG 和工作组
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.3" data-path="../develop/developing-environment.html">
|
|||
|
|
|||
|
<a href="../develop/developing-environment.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.3.</b>
|
|||
|
|
|||
|
开发环境搭建
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="7.3.1" data-path="../develop/using-vagrant-and-virtualbox-for-development.html">
|
|||
|
|
|||
|
<a href="../develop/using-vagrant-and-virtualbox-for-development.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.3.1.</b>
|
|||
|
|
|||
|
本地分布式开发环境搭建(使用 Vagrant 和 Virtualbox)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.4" data-path="../develop/testing.html">
|
|||
|
|
|||
|
<a href="../develop/testing.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.4.</b>
|
|||
|
|
|||
|
单元测试和集成测试
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.5" data-path="../develop/client-go-sample.html">
|
|||
|
|
|||
|
<a href="../develop/client-go-sample.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.5.</b>
|
|||
|
|
|||
|
client-go 示例
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.6" data-path="../develop/operator.html">
|
|||
|
|
|||
|
<a href="../develop/operator.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.6.</b>
|
|||
|
|
|||
|
Operator
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="7.6.1" data-path="../develop/operator-sdk.html">
|
|||
|
|
|||
|
<a href="../develop/operator-sdk.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.6.1.</b>
|
|||
|
|
|||
|
operator-sdk
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.7" data-path="../develop/kubebuilder.html">
|
|||
|
|
|||
|
<a href="../develop/kubebuilder.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.7.</b>
|
|||
|
|
|||
|
kubebuilder
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="7.7.1" data-path="../develop/kubebuilder-example.html">
|
|||
|
|
|||
|
<a href="../develop/kubebuilder-example.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.7.1.</b>
|
|||
|
|
|||
|
使用 kubebuilder 创建 operator 示例
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.8" data-path="../develop/advance-developer.html">
|
|||
|
|
|||
|
<a href="../develop/advance-developer.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.8.</b>
|
|||
|
|
|||
|
高级开发指南
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.9" data-path="../develop/contribute.html">
|
|||
|
|
|||
|
<a href="../develop/contribute.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.9.</b>
|
|||
|
|
|||
|
社区贡献
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.10" data-path="../develop/minikube.html">
|
|||
|
|
|||
|
<a href="../develop/minikube.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.10.</b>
|
|||
|
|
|||
|
Minikube
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">CNCF(云原生计算基金会)</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="8.1" data-path="../cloud-native/cncf.html">
|
|||
|
|
|||
|
<a href="../cloud-native/cncf.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.1.</b>
|
|||
|
|
|||
|
CNCF - 云原生计算基金会简介
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.2" data-path="../cloud-native/cncf-charter.html">
|
|||
|
|
|||
|
<a href="../cloud-native/cncf-charter.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.2.</b>
|
|||
|
|
|||
|
CNCF 章程
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.3" data-path="../cloud-native/cncf-sig.html">
|
|||
|
|
|||
|
<a href="../cloud-native/cncf-sig.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.3.</b>
|
|||
|
|
|||
|
CNCF 特别兴趣小组(SIG)说明
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.4" data-path="../cloud-native/cncf-sandbox-criteria.html">
|
|||
|
|
|||
|
<a href="../cloud-native/cncf-sandbox-criteria.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.4.</b>
|
|||
|
|
|||
|
开源项目加入 CNCF Sandbox 的要求
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.5" data-path="../cloud-native/cncf-project-governing.html">
|
|||
|
|
|||
|
<a href="../cloud-native/cncf-project-governing.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.5.</b>
|
|||
|
|
|||
|
CNCF 中的项目治理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.6" data-path="../cloud-native/cncf-ambassador.html">
|
|||
|
|
|||
|
<a href="../cloud-native/cncf-ambassador.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.6.</b>
|
|||
|
|
|||
|
CNCF Ambassador
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">附录</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="9.1" data-path="../appendix/">
|
|||
|
|
|||
|
<a href="../appendix/">
|
|||
|
|
|||
|
|
|||
|
<b>9.1.</b>
|
|||
|
|
|||
|
附录说明
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.2" data-path="../appendix/debug-kubernetes-services.html">
|
|||
|
|
|||
|
<a href="../appendix/debug-kubernetes-services.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.2.</b>
|
|||
|
|
|||
|
Kubernetes 中的应用故障排查
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.3" data-path="../appendix/material-share.html">
|
|||
|
|
|||
|
<a href="../appendix/material-share.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.3.</b>
|
|||
|
|
|||
|
Kubernetes 相关资讯和情报链接
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.4" data-path="../appendix/docker-best-practice.html">
|
|||
|
|
|||
|
<a href="../appendix/docker-best-practice.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.4.</b>
|
|||
|
|
|||
|
Docker 最佳实践
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.5" data-path="../appendix/tricks.html">
|
|||
|
|
|||
|
<a href="../appendix/tricks.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.5.</b>
|
|||
|
|
|||
|
使用技巧
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.6" data-path="../appendix/issues.html">
|
|||
|
|
|||
|
<a href="../appendix/issues.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.6.</b>
|
|||
|
|
|||
|
问题记录
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.7" data-path="../appendix/kubernetes-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.7.</b>
|
|||
|
|
|||
|
Kubernetes 版本更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="9.7.1" data-path="../appendix/kubernetes-1.7-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-1.7-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.7.1.</b>
|
|||
|
|
|||
|
Kubernetes1.7 更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.7.2" data-path="../appendix/kubernetes-1.8-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-1.8-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.7.2.</b>
|
|||
|
|
|||
|
Kubernetes1.8 更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.7.3" data-path="../appendix/kubernetes-1.9-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-1.9-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.7.3.</b>
|
|||
|
|
|||
|
Kubernetes1.9 更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.7.4" data-path="../appendix/kubernetes-1.10-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-1.10-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.7.4.</b>
|
|||
|
|
|||
|
Kubernetes1.10 更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.7.5" data-path="../appendix/kubernetes-1.11-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-1.11-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.7.5.</b>
|
|||
|
|
|||
|
Kubernetes1.11 更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.7.6" data-path="../appendix/kubernetes-1.12-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-1.12-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.7.6.</b>
|
|||
|
|
|||
|
Kubernetes1.12 更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.7.7" data-path="../appendix/kubernetes-1.13-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-1.13-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.7.7.</b>
|
|||
|
|
|||
|
Kubernetes1.13 更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.7.8" data-path="../appendix/kubernetes-1.14-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-1.14-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.7.8.</b>
|
|||
|
|
|||
|
Kubernetes1.14 更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.7.9" data-path="../appendix/kubernetes-1.15-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-1.15-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.7.9.</b>
|
|||
|
|
|||
|
Kubernetes1.15 更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.8" data-path="../appendix/summary-and-outlook.html">
|
|||
|
|
|||
|
<a href="../appendix/summary-and-outlook.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.8.</b>
|
|||
|
|
|||
|
Kubernetes 及云原生年度总结及展望
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="9.8.1" data-path="../appendix/kubernetes-and-cloud-native-summary-in-2017-and-outlook-for-2018.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-and-cloud-native-summary-in-2017-and-outlook-for-2018.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.8.1.</b>
|
|||
|
|
|||
|
Kubernetes 与云原生 2017 年年终总结及 2018 年展望
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.8.2" data-path="../appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.8.2.</b>
|
|||
|
|
|||
|
Kubernetes 与云原生 2018 年年终总结及 2019 年展望
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.9" data-path="../appendix/cncf-annual-report.html">
|
|||
|
|
|||
|
<a href="../appendix/cncf-annual-report.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.9.</b>
|
|||
|
|
|||
|
CNCF 年度报告解读
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="9.9.1" data-path="../appendix/cncf-annual-report-2018.html">
|
|||
|
|
|||
|
<a href="../appendix/cncf-annual-report-2018.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.9.1.</b>
|
|||
|
|
|||
|
CNCF 2018 年年度报告解读
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.10" data-path="../appendix/about-kcsp.html">
|
|||
|
|
|||
|
<a href="../appendix/about-kcsp.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.10.</b>
|
|||
|
|
|||
|
Kubernetes 认证服务提供商(KCSP)说明
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="9.11" data-path="../appendix/about-cka-candidate.html">
|
|||
|
|
|||
|
<a href="../appendix/about-cka-candidate.html">
|
|||
|
|
|||
|
|
|||
|
<b>9.11.</b>
|
|||
|
|
|||
|
认证 Kubernetes 管理员(CKA)说明
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="divider"></li>
|
|||
|
|
|||
|
<li>
|
|||
|
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
|
|||
|
本书使用 GitBook 发布
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
|
|||
|
|
|||
|
</nav>
|
|||
|
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
<div class="book-body">
|
|||
|
|
|||
|
<div class="body-inner">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<div class="book-header" role="navigation">
|
|||
|
|
|||
|
|
|||
|
<!-- Title -->
|
|||
|
<h1>
|
|||
|
<i class="fa fa-circle-o-notch fa-spin"></i>
|
|||
|
<a href=".." >Sidecar 的注入与流量劫持</a>
|
|||
|
</h1>
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<div class="page-wrapper" tabindex="-1" role="main">
|
|||
|
<div class="page-inner">
|
|||
|
|
|||
|
<div class="search-plus" id="book-search-results">
|
|||
|
<div class="search-noresults">
|
|||
|
|
|||
|
<section class="normal markdown-section">
|
|||
|
|
|||
|
<h1 id="深入理解istio-service-mesh中的envoy-sidecar注入与流量劫持">深入理解Istio Service Mesh中的Envoy Sidecar注入与流量劫持</h1>
|
|||
|
<p><strong>本文基于 Istio 1.5。</strong></p>
|
|||
|
<p>本文基于 Istio 1.5.1 版本,将为大家介绍以下内容:</p>
|
|||
|
<ul>
|
|||
|
<li>什么是 sidecar 模式和它的优势在哪里。</li>
|
|||
|
<li>Istio 中是如何做 sidecar 注入的?</li>
|
|||
|
<li>Sidecar proxy 是如何做透明流量劫持的?</li>
|
|||
|
<li>流量是如何路由到 upstream 的?</li>
|
|||
|
</ul>
|
|||
|
<p>在此之前我曾写过基于 Istio 1.1 版本的<a href="../blog/envoy-sidecar-injection-in-istio-service-mesh-deep-dive">理解 Istio Service Mesh 中 Envoy 代理 Sidecar 注入及流量劫持</a>,Istio 1.5 与 Istio 1.1 中的 sidecar 注入和流量劫持环节最大的变化是:</p>
|
|||
|
<ul>
|
|||
|
<li>iptables 改用命令行工具,不再使用 shell 脚本。</li>
|
|||
|
<li>sidecar inbound 和 outbound 分别指定了端口,而之前是使用同一个端口(15001)。</li>
|
|||
|
</ul>
|
|||
|
<p>注:本文中部分内容收录于 ServiceMesher 社区出品的 <a href="https://www.servicemesher.com/istio-handbook/" target="_blank">Istio Handbook</a>。</p>
|
|||
|
<h2 id="sidecar-模式">Sidecar 模式</h2>
|
|||
|
<p>将应用程序的功能划分为单独的进程运行在同一个最小调度单元中(例如 Kubernetes 中的 Pod)可以被视为 <strong>sidecar 模式</strong>。如下图所示,sidecar 模式允许您在应用程序旁边添加更多功能,而无需额外第三方组件配置或修改应用程序代码。</p>
|
|||
|
<figure id="fig6.3.2.5.1"><a href="../images/sidecar-pattern.jpg" data-lightbox="888f8e74-d6a8-4bcb-9031-7ccada8c3989" data-title="Sidecar 模式示意图"><img src="../images/sidecar-pattern.jpg" alt="Sidecar 模式示意图"></a><figcaption>图 6.3.2.5.1:Sidecar 模式示意图</figcaption></figure>
|
|||
|
<p>就像连接了 Sidecar 的三轮摩托车一样,在软件架构中, Sidecar 连接到父应用并且为其添加扩展或者增强功能。Sidecar 应用与主应用程序松散耦合。它可以屏蔽不同编程语言的差异,统一实现微服务的可观察性、监控、日志记录、配置、断路器等功能。</p>
|
|||
|
<h3 id="使用-sidecar-模式的优势">使用 Sidecar 模式的优势</h3>
|
|||
|
<p>使用 sidecar 模式部署服务网格时,无需在节点上运行代理,但是集群中将运行多个相同的 sidecar 副本。在 sidecar 部署方式中,每个应用的容器旁都会部署一个伴生容器(如 <a href="https://www.servicemesher.com/istio-handbook/GLOSSARY.html#envoy" target="_blank">Envoy</a> 或 <a href="https://www.servicemesher.com/istio-handbook/GLOSSARY.html#mosn" target="_blank">MOSN</a>),这个容器称之为 sidecar 容器。Sidecar 接管进出应用容器的所有流量。在 Kubernetes 的 Pod 中,在原有的应用容器旁边注入一个 Sidecar 容器,两个容器共享存储、网络等资源,可以广义的将这个包含了 sidecar 容器的 Pod 理解为一台主机,两个容器共享主机资源。</p>
|
|||
|
<p>因其独特的部署结构,使得 sidecar 模式具有以下优势:</p>
|
|||
|
<ul>
|
|||
|
<li>将与应用业务逻辑无关的功能抽象到共同基础设施,降低了微服务代码的复杂度。</li>
|
|||
|
<li>因为不再需要编写相同的第三方组件配置文件和代码,所以能够降低微服务架构中的代码重复度。</li>
|
|||
|
<li>Sidecar 可独立升级,降低应用程序代码和底层平台的耦合度。</li>
|
|||
|
</ul>
|
|||
|
<h2 id="istio-中的-sidecar-注入">Istio 中的 sidecar 注入</h2>
|
|||
|
<p>Istio 中提供了以下两种 sidecar 注入方式:</p>
|
|||
|
<ul>
|
|||
|
<li>使用 <code>istioctl</code> 手动注入。</li>
|
|||
|
<li>基于 Kubernetes 的 <a href="https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/" target="_blank">突变 webhook 入驻控制器(mutating webhook addmission controller</a> 的自动 sidecar 注入方式。</li>
|
|||
|
</ul>
|
|||
|
<p>不论是手动注入还是自动注入,sidecar 的注入过程都需要遵循如下步骤:</p>
|
|||
|
<ol>
|
|||
|
<li>Kubernetes 需要了解待注入的 sidecar 所连接的 Istio 集群及其配置;</li>
|
|||
|
<li>Kubernetes 需要了解待注入的 sidecar 容器本身的配置,如镜像地址、启动参数等;</li>
|
|||
|
<li>Kubernetes 根据 sidecar 注入模板和以上配置填充 sidecar 的配置参数,将以上配置注入到应用容器的一侧;</li>
|
|||
|
</ol>
|
|||
|
<p>使用下面的命令可以手动注入 sidecar。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl kube-inject -f <span class="token variable">${YAML_FILE}</span> <span class="token operator">|</span> kuebectl apply -f -
|
|||
|
</code></pre>
|
|||
|
<p>该命令会使用 Istio 内置的 sidecar 配置来注入,下面使用 Istio详细配置请参考 <a href="https://istio.io/docs/setup/additional-setup/sidecar-injection/#manual-sidecar-injection" target="_blank">Istio 官网</a>。</p>
|
|||
|
<p>注入完成后您将看到 Istio 为原有 pod template 注入了 <code>initContainer</code> 及 sidecar proxy相关的配置。</p>
|
|||
|
<h3 id="init-容器">Init 容器</h3>
|
|||
|
<p>Init 容器是一种专用容器,它在应用程序容器启动之前运行,用来包含一些应用镜像中不存在的实用工具或安装脚本。</p>
|
|||
|
<p>一个 Pod 中可以指定多个 Init 容器,如果指定了多个,那么 Init 容器将会按顺序依次运行。只有当前面的 Init 容器必须运行成功后,才可以运行下一个 Init 容器。当所有的 Init 容器运行完成后,Kubernetes 才初始化 Pod 和运行应用容器。</p>
|
|||
|
<p>Init 容器使用 Linux Namespace,所以相对应用程序容器来说具有不同的文件系统视图。因此,它们能够具有访问 Secret 的权限,而应用程序容器则不能。</p>
|
|||
|
<p>在 Pod 启动过程中,Init 容器会按顺序在网络和数据卷初始化之后启动。每个容器必须在下一个容器启动之前成功退出。如果由于运行时或失败退出,将导致容器启动失败,它会根据 Pod 的 <code>restartPolicy</code> 指定的策略进行重试。然而,如果 Pod 的 <code>restartPolicy</code> 设置为 Always,Init 容器失败时会使用 <code>RestartPolicy</code> 策略。</p>
|
|||
|
<p>在所有的 Init 容器没有成功之前,Pod 将不会变成 <code>Ready</code> 状态。Init 容器的端口将不会在 Service中进行聚集。 正在初始化中的 Pod 处于 <code>Pending</code> 状态,但应该会将 <code>Initializing</code> 状态设置为 true。Init 容器运行完成以后就会自动终止。</p>
|
|||
|
<p>关于 Init 容器的详细信息请参考 <a href="https://jimmysong.io/kubernetes-handbook/concepts/init-containers.html" target="_blank">Init 容器 - Kubernetes 中文指南/云原生应用架构实践手册</a>。</p>
|
|||
|
<h2 id="sidecar-注入示例分析">Sidecar 注入示例分析</h2>
|
|||
|
<p>以 Istio 官方提供的 <code>bookinfo</code> 中 <code>productpage</code> 的 YAML 为例,关于 <code>bookinfo</code> 应用的详细 YAML 配置请参考 <a href="https://github.com/istio/istio/blob/master/samples/bookinfo/platform/kube/bookinfo.yaml" target="_blank">bookinfo.yaml</a>。</p>
|
|||
|
<p>下文将从以下几个方面讲解:</p>
|
|||
|
<ul>
|
|||
|
<li>Sidecar 容器的注入</li>
|
|||
|
<li>iptables 规则的创建</li>
|
|||
|
<li>路由的详细过程</li>
|
|||
|
</ul>
|
|||
|
<pre class="language-"><code class="lang-yaml"><span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> apps/v1
|
|||
|
<span class="token key atrule">kind</span><span class="token punctuation">:</span> Deployment
|
|||
|
<span class="token key atrule">metadata</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">name</span><span class="token punctuation">:</span> productpage<span class="token punctuation">-</span>v1
|
|||
|
<span class="token key atrule">labels</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">app</span><span class="token punctuation">:</span> productpage
|
|||
|
<span class="token key atrule">version</span><span class="token punctuation">:</span> v1
|
|||
|
<span class="token key atrule">spec</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">replicas</span><span class="token punctuation">:</span> <span class="token number">1</span>
|
|||
|
<span class="token key atrule">selector</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">matchLabels</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">app</span><span class="token punctuation">:</span> productpage
|
|||
|
<span class="token key atrule">version</span><span class="token punctuation">:</span> v1
|
|||
|
<span class="token key atrule">template</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">metadata</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">labels</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">app</span><span class="token punctuation">:</span> productpage
|
|||
|
<span class="token key atrule">version</span><span class="token punctuation">:</span> v1
|
|||
|
<span class="token key atrule">spec</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">serviceAccountName</span><span class="token punctuation">:</span> bookinfo<span class="token punctuation">-</span>productpage
|
|||
|
<span class="token key atrule">containers</span><span class="token punctuation">:</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> productpage
|
|||
|
<span class="token key atrule">image</span><span class="token punctuation">:</span> docker.io/istio/examples<span class="token punctuation">-</span>bookinfo<span class="token punctuation">-</span>productpage<span class="token punctuation">-</span>v1<span class="token punctuation">:</span>1.15.0
|
|||
|
<span class="token key atrule">imagePullPolicy</span><span class="token punctuation">:</span> IfNotPresent
|
|||
|
<span class="token key atrule">ports</span><span class="token punctuation">:</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token key atrule">containerPort</span><span class="token punctuation">:</span> <span class="token number">9080</span>
|
|||
|
<span class="token key atrule">volumeMounts</span><span class="token punctuation">:</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> tmp
|
|||
|
<span class="token key atrule">mountPath</span><span class="token punctuation">:</span> /tmp
|
|||
|
<span class="token key atrule">volumes</span><span class="token punctuation">:</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> tmp
|
|||
|
<span class="token key atrule">emptyDir</span><span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
|
|||
|
</code></pre>
|
|||
|
<p>再查看下 <code>productpage</code> 容器的 <a href="https://github.com/istio/istio/blob/master/samples/bookinfo/src/productpage/Dockerfile" target="_blank">Dockerfile</a>。</p>
|
|||
|
<pre class="language-"><code class="lang-docker"><span class="token keyword">FROM</span> python<span class="token punctuation">:</span>3.7.4<span class="token punctuation">-</span>slim
|
|||
|
|
|||
|
<span class="token keyword">COPY</span> requirements.txt ./
|
|||
|
<span class="token keyword">RUN</span> pip install <span class="token punctuation">-</span><span class="token punctuation">-</span>no<span class="token punctuation">-</span>cache<span class="token punctuation">-</span>dir <span class="token punctuation">-</span>r requirements.txt
|
|||
|
|
|||
|
<span class="token keyword">COPY</span> test<span class="token punctuation">-</span>requirements.txt ./
|
|||
|
<span class="token keyword">RUN</span> pip install <span class="token punctuation">-</span><span class="token punctuation">-</span>no<span class="token punctuation">-</span>cache<span class="token punctuation">-</span>dir <span class="token punctuation">-</span>r test<span class="token punctuation">-</span>requirements.txt
|
|||
|
|
|||
|
<span class="token keyword">COPY</span> productpage.py /opt/microservices/
|
|||
|
<span class="token keyword">COPY</span> tests/unit/* /opt/microservices/
|
|||
|
<span class="token keyword">COPY</span> templates /opt/microservices/templates
|
|||
|
<span class="token keyword">COPY</span> static /opt/microservices/static
|
|||
|
<span class="token keyword">COPY</span> requirements.txt /opt/microservices/
|
|||
|
|
|||
|
<span class="token keyword">ARG</span> flood_factor
|
|||
|
<span class="token keyword">ENV</span> FLOOD_FACTOR $<span class="token punctuation">{</span>flood_factor<span class="token punctuation">:</span><span class="token punctuation">-</span>0<span class="token punctuation">}</span>
|
|||
|
|
|||
|
<span class="token keyword">EXPOSE</span> 9080
|
|||
|
<span class="token keyword">WORKDIR</span> /opt/microservices
|
|||
|
<span class="token keyword">RUN</span> python <span class="token punctuation">-</span>m unittest discover
|
|||
|
|
|||
|
<span class="token keyword">USER</span> 1
|
|||
|
|
|||
|
<span class="token keyword">CMD</span> <span class="token punctuation">[</span><span class="token string">"python"</span><span class="token punctuation">,</span> <span class="token string">"productpage.py"</span><span class="token punctuation">,</span> <span class="token string">"9080"</span><span class="token punctuation">]</span>
|
|||
|
</code></pre>
|
|||
|
<p>我们看到 <code>Dockerfile</code> 中没有配置 <code>ENTRYPOINT</code>,所以 <code>CMD</code> 的配置 <code>python productpage.py 9080</code> 将作为默认的 <code>ENTRYPOINT</code>,记住这一点,再看下注入 sidecar 之后的配置。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml
|
|||
|
</code></pre>
|
|||
|
<p>我们只截取其中与 <code>productpage</code> 相关的 <code>Deployment</code> 配置中的部分 YAML 配置。</p>
|
|||
|
<pre class="language-"><code class="lang-yaml"> <span class="token key atrule">containers</span><span class="token punctuation">:</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token key atrule">image</span><span class="token punctuation">:</span> docker.io/istio/examples<span class="token punctuation">-</span>bookinfo<span class="token punctuation">-</span>productpage<span class="token punctuation">-</span>v1<span class="token punctuation">:</span>1.15.0 <span class="token comment"># 应用镜像</span>
|
|||
|
<span class="token key atrule">name</span><span class="token punctuation">:</span> productpage
|
|||
|
<span class="token key atrule">ports</span><span class="token punctuation">:</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token key atrule">containerPort</span><span class="token punctuation">:</span> <span class="token number">9080</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token key atrule">args</span><span class="token punctuation">:</span>
|
|||
|
<span class="token punctuation">-</span> proxy
|
|||
|
<span class="token punctuation">-</span> sidecar
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>domain
|
|||
|
<span class="token punctuation">-</span> $(POD_NAMESPACE).svc.cluster.local
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>configPath
|
|||
|
<span class="token punctuation">-</span> /etc/istio/proxy
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>binaryPath
|
|||
|
<span class="token punctuation">-</span> /usr/local/bin/envoy
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>serviceCluster
|
|||
|
<span class="token punctuation">-</span> productpage.$(POD_NAMESPACE)
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>drainDuration
|
|||
|
<span class="token punctuation">-</span> 45s
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>parentShutdownDuration
|
|||
|
<span class="token punctuation">-</span> 1m0s
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>discoveryAddress
|
|||
|
<span class="token punctuation">-</span> istiod.istio<span class="token punctuation">-</span>system.svc<span class="token punctuation">:</span><span class="token number">15012</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>zipkinAddress
|
|||
|
<span class="token punctuation">-</span> zipkin.istio<span class="token punctuation">-</span>system<span class="token punctuation">:</span><span class="token number">9411</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>proxyLogLevel=warning
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>proxyComponentLogLevel=misc<span class="token punctuation">:</span>error
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>connectTimeout
|
|||
|
<span class="token punctuation">-</span> 10s
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>proxyAdminPort
|
|||
|
<span class="token punctuation">-</span> <span class="token string">"15000"</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>concurrency
|
|||
|
<span class="token punctuation">-</span> <span class="token string">"2"</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>controlPlaneAuthPolicy
|
|||
|
<span class="token punctuation">-</span> NONE
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>dnsRefreshRate
|
|||
|
<span class="token punctuation">-</span> 300s
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>statusPort
|
|||
|
<span class="token punctuation">-</span> <span class="token string">"15020"</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>trust<span class="token punctuation">-</span>domain=cluster.local
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span><span class="token punctuation">-</span>controlPlaneBootstrap=false
|
|||
|
<span class="token key atrule">image</span><span class="token punctuation">:</span> docker.io/istio/proxyv2<span class="token punctuation">:</span>1.5.1 <span class="token comment"># sidecar proxy</span>
|
|||
|
<span class="token key atrule">name</span><span class="token punctuation">:</span> istio<span class="token punctuation">-</span>proxy
|
|||
|
<span class="token key atrule">ports</span><span class="token punctuation">:</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token key atrule">containerPort</span><span class="token punctuation">:</span> <span class="token number">15090</span>
|
|||
|
<span class="token key atrule">name</span><span class="token punctuation">:</span> http<span class="token punctuation">-</span>envoy<span class="token punctuation">-</span>prom
|
|||
|
<span class="token key atrule">protocol</span><span class="token punctuation">:</span> TCP
|
|||
|
<span class="token key atrule">initContainers</span><span class="token punctuation">:</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token key atrule">command</span><span class="token punctuation">:</span>
|
|||
|
<span class="token punctuation">-</span> istio<span class="token punctuation">-</span>iptables
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span>p
|
|||
|
<span class="token punctuation">-</span> <span class="token string">"15001"</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span>z
|
|||
|
<span class="token punctuation">-</span> <span class="token string">"15006"</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span>u
|
|||
|
<span class="token punctuation">-</span> <span class="token string">"1337"</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span>m
|
|||
|
<span class="token punctuation">-</span> REDIRECT
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span>i
|
|||
|
<span class="token punctuation">-</span> <span class="token string">'*'</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span>x
|
|||
|
<span class="token punctuation">-</span> <span class="token string">""</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span>b
|
|||
|
<span class="token punctuation">-</span> <span class="token string">'*'</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token punctuation">-</span>d
|
|||
|
<span class="token punctuation">-</span> <span class="token number">15090</span><span class="token punctuation">,</span><span class="token number">15020</span>
|
|||
|
<span class="token key atrule">image</span><span class="token punctuation">:</span> docker.io/istio/proxyv2<span class="token punctuation">:</span>1.5.1 <span class="token comment"># init 容器</span>
|
|||
|
<span class="token key atrule">name</span><span class="token punctuation">:</span> istio<span class="token punctuation">-</span>init
|
|||
|
</code></pre>
|
|||
|
<p>Istio 给应用 Pod 注入的配置主要包括:</p>
|
|||
|
<ul>
|
|||
|
<li>Init 容器 <code>istio-init</code>:用于 pod 中设置 iptables 端口转发</li>
|
|||
|
<li>Sidecar 容器 <code>istio-proxy</code>:运行 sidecar 代理,如 <a href="https://www.servicemesher.com/istio-handbook/GLOSSARY.html#envoy" target="_blank">Envoy</a> 或 <a href="https://www.servicemesher.com/istio-handbook/GLOSSARY.html#mosn" target="_blank">MOSN</a></li>
|
|||
|
</ul>
|
|||
|
<p>接下来将分别解析下这两个容器。</p>
|
|||
|
<h2 id="init-容器解析">Init 容器解析</h2>
|
|||
|
<p>Istio 在 pod 中注入的 Init 容器名为 <code>istio-init</code>,我们在上面 Istio 注入完成后的 YAML 文件中看到了该容器的启动命令是:</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istio-iptables -p <span class="token number">15001</span> -z <span class="token number">15006</span> -u <span class="token number">1337</span> -m REDIRECT -i <span class="token string">'*'</span> -x <span class="token string">""</span> -b <span class="token string">'*'</span> -d <span class="token number">15090,15020</span>
|
|||
|
</code></pre>
|
|||
|
<p>我们再检查下该容器的 <a href="https://github.com/istio/istio/blob/master/pilot/docker/Dockerfile.proxyv2" target="_blank">Dockerfile</a> 看看 <code>ENTRYPOINT</code> 是怎么确定启动时执行的命令。</p>
|
|||
|
<pre class="language-"><code class="lang-docker"><span class="token comment"># 前面的内容省略</span>
|
|||
|
<span class="token comment"># The pilot-agent will bootstrap Envoy.</span>
|
|||
|
<span class="token keyword">ENTRYPOINT</span> <span class="token punctuation">[</span><span class="token string">"/usr/local/bin/pilot-agent"</span><span class="token punctuation">]</span>
|
|||
|
</code></pre>
|
|||
|
<p>我们看到 <code>istio-init</code> 容器的入口是 <code>/usr/local/bin/istio-iptables</code> 命令行,该命令行工具的代码的位置在 Istio 源码仓库的 <a href="https://github.com/istio/istio/tree/master/tools/istio-iptables" target="_blank">tools/istio-iptables</a> 目录。</p>
|
|||
|
<p>注意:在 Istio 1.1 版本时还是使用 <code>isito-iptables.sh</code> 命令行来操作 IPtables。</p>
|
|||
|
<h3 id="init-容器启动入口">Init 容器启动入口</h3>
|
|||
|
<p>Init 容器的启动入口是 <code>istio-iptables</code> 命令行,该命令行工具的用法如下:</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ istio-iptables <span class="token punctuation">[</span>flags<span class="token punctuation">]</span>
|
|||
|
-p: 指定重定向所有 TCP 流量的 sidecar 端口(默认为 <span class="token variable">$ENVOY_PORT</span> <span class="token operator">=</span> <span class="token number">15001</span>)
|
|||
|
-m: 指定入站连接重定向到 sidecar 的模式,“REDIRECT” 或 “TPROXY”(默认为 <span class="token variable">$ISTIO_INBOUND_INTERCEPTION_MODE</span><span class="token punctuation">)</span>
|
|||
|
-b: 逗号分隔的入站端口列表,其流量将重定向到 Envoy(可选)。使用通配符 “*” 表示重定向所有端口。为空时表示禁用所有入站重定向(默认为 <span class="token variable">$ISTIO_INBOUND_PORTS</span>)
|
|||
|
-d: 指定要从重定向到 sidecar 中排除的入站端口列表(可选),以逗号格式分隔。使用通配符“*” 表示重定向所有入站流量(默认为 <span class="token variable">$ISTIO_LOCAL_EXCLUDE_PORTS</span>)
|
|||
|
-o:逗号分隔的出站端口列表,不包括重定向到 Envoy 的端口。
|
|||
|
-i: 指定重定向到 sidecar 的 IP 地址范围(可选),以逗号分隔的 CIDR 格式列表。使用通配符 “*” 表示重定向所有出站流量。空列表将禁用所有出站重定向(默认为 <span class="token variable">$ISTIO_SERVICE_CIDR</span>)
|
|||
|
-x: 指定将从重定向中排除的 IP 地址范围,以逗号分隔的 CIDR 格式列表。使用通配符 “*” 表示重定向所有出站流量(默认为 <span class="token variable">$ISTIO_SERVICE_EXCLUDE_CIDR</span>)。
|
|||
|
-k:逗号分隔的虚拟接口列表,其入站流量(来自虚拟机的)将被视为出站流量。
|
|||
|
-g:指定不应用重定向的用户的 GID。<span class="token punctuation">(</span>默认值与 -u param 相同<span class="token punctuation">)</span>
|
|||
|
-u:指定不应用重定向的用户的 <span class="token environment constant">UID</span>。通常情况下,这是代理容器的 <span class="token environment constant">UID</span>(默认值是 <span class="token number">1337</span>,即 istio-proxy 的 <span class="token environment constant">UID</span>)。
|
|||
|
-z: 所有进入 pod/VM 的 TCP 流量应被重定向到的端口(默认 <span class="token variable">$INBOUND_CAPTURE_PORT</span> <span class="token operator">=</span> <span class="token number">15006</span>)。
|
|||
|
</code></pre>
|
|||
|
<p>以上传入的参数都会重新组装成 <a href="https://wangchujiang.com/linux-command/c/iptables.html" target="_blank"><code>iptables</code> </a>规则,关于该命令的详细用法请访问 <a href="https://github.com/istio/istio/blob/master/tools/istio-iptables/pkg/cmd/root.go" target="_blank">tools/istio-iptables/pkg/cmd/root.go</a>。</p>
|
|||
|
<p>该容器存在的意义就是让 sidecar 代理可以拦截所有的进出 pod 的流量,15090 端口(Mixer 使用)和 15092 端口(Ingress Gateway)除外的所有入站(inbound)流量重定向到 15006 端口(sidecar),再拦截应用容器的出站(outbound)流量经过 sidecar 处理(通过 15001 端口监听)后再出站。关于 Istio 中端口用途请参考 <a href="https://istio.io/zh/docs/ops/deployment/requirements/" target="_blank">Istio 官方文档</a>。</p>
|
|||
|
<p><strong>命令解析</strong></p>
|
|||
|
<p>这条启动命令的作用是:</p>
|
|||
|
<ul>
|
|||
|
<li>将应用容器的所有流量都转发到 sidecar 的 15006 端口。</li>
|
|||
|
<li>使用 <code>istio-proxy</code> 用户身份运行, UID 为 1337,即 sidecar 所处的用户空间,这也是 <code>istio-proxy</code> 容器默认使用的用户,见 YAML 配置中的 <code>runAsUser</code> 字段。</li>
|
|||
|
<li>使用默认的 <code>REDIRECT</code> 模式来重定向流量。</li>
|
|||
|
<li>将所有出站流量都重定向到 sidecar 代理(通过 15001 端口)。</li>
|
|||
|
</ul>
|
|||
|
<p>因为 Init 容器初始化完毕后就会自动终止,因为我们无法登陆到容器中查看 iptables 信息,但是 Init 容器初始化结果会保留到应用容器和 sidecar 容器中。</p>
|
|||
|
<h2 id="iptables-注入解析">iptables 注入解析</h2>
|
|||
|
<p>为了查看 iptables 配置,我们需要登陆到 sidecar 容器中使用 root 用户来查看,因为 <code>kubectl</code> 无法使用特权模式来远程操作 docker 容器,所以我们需要登陆到 <code>productpage</code> pod 所在的主机上使用 <code>docker</code> 命令登陆容器中查看。</p>
|
|||
|
<p>如果您使用 minikube 部署的 Kubernetes,可以直接登录到 minikube 的虚拟机中并切换为 root 用户。查看 iptables 配置,列出 NAT(网络地址转换)表的所有规则,因为在 Init 容器启动的时候选择给 <code>istio-iptables</code> 传递的参数中指定将入站流量重定向到 sidecar 的模式为 <code>REDIRECT</code>,因此在 iptables 中将只有 NAT 表的规格配置,如果选择 <code>TPROXY</code> 还会有 <code>mangle</code> 表配置。<code>iptables</code> 命令的详细用法请参考 <a href="https://wangchujiang.com/linux-command/c/iptables.html" target="_blank">iptables</a> 命令。</p>
|
|||
|
<p>我们仅查看与 <code>productpage</code> 有关的 iptables 规则如下。</p>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token comment"># 进入 minikube 并切换为 root 用户,minikube 默认用户为 docker</span>
|
|||
|
$ minikube <span class="token function">ssh</span>
|
|||
|
$ <span class="token function">sudo</span> -i
|
|||
|
|
|||
|
<span class="token comment"># 查看 productpage pod 的 istio-proxy 容器中的进程</span>
|
|||
|
$ docker <span class="token function">top</span> <span class="token variable"><span class="token variable">`</span>docker <span class="token function">ps</span><span class="token operator">|</span><span class="token function">grep</span> <span class="token string">"istio-proxy_productpage"</span><span class="token operator">|</span><span class="token function">cut</span> -d <span class="token string">" "</span> -f1<span class="token variable">`</span></span>
|
|||
|
<span class="token environment constant">UID</span> PID <span class="token environment constant">PPID</span> C STIME TTY TIME CMD
|
|||
|
<span class="token number">1337</span> <span class="token number">10576</span> <span class="token number">10517</span> <span class="token number">0</span> 08:09 ? 00:00:07 /usr/local/bin/pilot-agent proxy sidecar --domain default.svc.cluster.local --configPath /etc/istio/proxy --binaryPath /usr/local/bin/envoy --serviceCluster productpage.default --drainDuration 45s --parentShutdownDuration 1m0s --discoveryAddress istiod.istio-system.svc:15012 --zipkinAddress zipkin.istio-system:9411 --proxyLogLevel<span class="token operator">=</span>warning --proxyComponentLogLevel<span class="token operator">=</span>misc:error --connectTimeout 10s --proxyAdminPort <span class="token number">15000</span> --concurrency <span class="token number">2</span> --controlPlaneAuthPolicy NONE --dnsRefreshRate 300s --statusPort <span class="token number">15020</span> --trust-domain<span class="token operator">=</span>cluster.local --controlPlaneBootstrap<span class="token operator">=</span>false
|
|||
|
<span class="token number">1337</span> <span class="token number">10660</span> <span class="token number">10576</span> <span class="token number">0</span> 08:09 ? 00:00:33 /usr/local/bin/envoy -c /etc/istio/proxy/envoy-rev0.json --restart-epoch <span class="token number">0</span> --drain-time-s <span class="token number">45</span> --parent-shutdown-time-s <span class="token number">60</span> --service-cluster productpage.default --service-node sidecar~172.17.0.16~productpage-v1-7f44c4d57c-ksf9b.default~default.svc.cluster.local --max-obj-name-len <span class="token number">189</span> --local-address-ip-version v4 --log-format <span class="token punctuation">[</span>Envoy <span class="token punctuation">(</span>Epoch <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token punctuation">[</span>%Y-%m-%d %T.%e<span class="token punctuation">]</span><span class="token punctuation">[</span>%t<span class="token punctuation">]</span><span class="token punctuation">[</span>%l<span class="token punctuation">]</span><span class="token punctuation">[</span>%n<span class="token punctuation">]</span> %v -l warning --component-log-level misc:error --concurrency <span class="token number">2</span>
|
|||
|
|
|||
|
<span class="token comment"># 进入 nsenter 进入 sidecar 容器的命名空间(以上任何一个都可以)</span>
|
|||
|
$ nsenter -n --target <span class="token number">10660</span>
|
|||
|
</code></pre>
|
|||
|
<p>在该进程的命名空间下查看其 iptables 规则链。</p>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token comment"># 查看 NAT 表中规则配置的详细信息。</span>
|
|||
|
$ iptables -t nat -L -v
|
|||
|
<span class="token comment"># PREROUTING 链:用于目标地址转换(DNAT),将所有入站 TCP 流量跳转到 ISTIO_INBOUND 链上。</span>
|
|||
|
Chain PREROUTING <span class="token punctuation">(</span>policy ACCEPT <span class="token number">2701</span> packets, 162K bytes<span class="token punctuation">)</span>
|
|||
|
pkts bytes target prot opt <span class="token keyword">in</span> out <span class="token builtin class-name">source</span> destination
|
|||
|
<span class="token number">2701</span> 162K ISTIO_INBOUND tcp -- any any anywhere anywhere
|
|||
|
|
|||
|
<span class="token comment"># INPUT 链:处理输入数据包,非 TCP 流量将继续 OUTPUT 链。</span>
|
|||
|
Chain INPUT <span class="token punctuation">(</span>policy ACCEPT <span class="token number">2701</span> packets, 162K bytes<span class="token punctuation">)</span>
|
|||
|
pkts bytes target prot opt <span class="token keyword">in</span> out <span class="token builtin class-name">source</span> destination
|
|||
|
|
|||
|
<span class="token comment"># OUTPUT 链:将所有出站数据包跳转到 ISTIO_OUTPUT 链上。</span>
|
|||
|
Chain OUTPUT <span class="token punctuation">(</span>policy ACCEPT <span class="token number">79</span> packets, <span class="token number">6761</span> bytes<span class="token punctuation">)</span>
|
|||
|
pkts bytes target prot opt <span class="token keyword">in</span> out <span class="token builtin class-name">source</span> destination
|
|||
|
<span class="token number">15</span> <span class="token number">900</span> ISTIO_OUTPUT tcp -- any any anywhere anywhere
|
|||
|
|
|||
|
<span class="token comment"># POSTROUTING 链:所有数据包流出网卡时都要先进入POSTROUTING 链,内核根据数据包目的地判断是否需要转发出去,我们看到此处未做任何处理。</span>
|
|||
|
Chain POSTROUTING <span class="token punctuation">(</span>policy ACCEPT <span class="token number">79</span> packets, <span class="token number">6761</span> bytes<span class="token punctuation">)</span>
|
|||
|
pkts bytes target prot opt <span class="token keyword">in</span> out <span class="token builtin class-name">source</span> destination
|
|||
|
|
|||
|
<span class="token comment"># ISTIO_INBOUND 链:将所有入站流量重定向到 ISTIO_IN_REDIRECT 链上,目的地为 15090(mixer 使用)和 15020(Ingress gateway 使用,用于 Pilot 健康检查)端口的流量除外,发送到以上两个端口的流量将返回 iptables 规则链的调用点,即 PREROUTING 链的后继 POSTROUTING。</span>
|
|||
|
Chain ISTIO_INBOUND <span class="token punctuation">(</span><span class="token number">1</span> references<span class="token punctuation">)</span>
|
|||
|
pkts bytes target prot opt <span class="token keyword">in</span> out <span class="token builtin class-name">source</span> destination
|
|||
|
<span class="token number">0</span> <span class="token number">0</span> RETURN tcp -- any any anywhere anywhere tcp dpt:ssh
|
|||
|
<span class="token number">2</span> <span class="token number">120</span> RETURN tcp -- any any anywhere anywhere tcp dpt:15090
|
|||
|
<span class="token number">2699</span> 162K RETURN tcp -- any any anywhere anywhere tcp dpt:15020
|
|||
|
<span class="token number">0</span> <span class="token number">0</span> ISTIO_IN_REDIRECT tcp -- any any anywhere anywhere
|
|||
|
|
|||
|
<span class="token comment"># ISTIO_IN_REDIRECT 链:将所有的入站流量跳转到本地的 15006 端口,至此成功的拦截了流量到 sidecar 中。</span>
|
|||
|
Chain ISTIO_IN_REDIRECT <span class="token punctuation">(</span><span class="token number">3</span> references<span class="token punctuation">)</span>
|
|||
|
pkts bytes target prot opt <span class="token keyword">in</span> out <span class="token builtin class-name">source</span> destination
|
|||
|
<span class="token number">0</span> <span class="token number">0</span> REDIRECT tcp -- any any anywhere anywhere redir ports <span class="token number">15006</span>
|
|||
|
|
|||
|
<span class="token comment"># ISTIO_OUTPUT 链:选择需要重定向到 Envoy(即本地) 的出站流量,所有非 localhost 的流量全部转发到 ISTIO_REDIRECT。为了避免流量在该 Pod 中无限循环,所有到 istio-proxy 用户空间的流量都返回到它的调用点中的下一条规则,本例中即 OUTPUT 链,因为跳出 ISTIO_OUTPUT 规则之后就进入下一条链 POSTROUTING。如果目的地非 localhost 就跳转到 ISTIO_REDIRECT;如果流量是来自 istio-proxy 用户空间的,那么就跳出该链,返回它的调用链继续执行下一条规则(OUTPUT 的下一条规则,无需对流量进行处理);所有的非 istio-proxy 用户空间的目的地是 localhost 的流量就跳转到 ISTIO_REDIRECT。</span>
|
|||
|
Chain ISTIO_OUTPUT <span class="token punctuation">(</span><span class="token number">1</span> references<span class="token punctuation">)</span>
|
|||
|
pkts bytes target prot opt <span class="token keyword">in</span> out <span class="token builtin class-name">source</span> destination
|
|||
|
<span class="token number">0</span> <span class="token number">0</span> RETURN all -- any lo <span class="token number">127.0</span>.0.6 anywhere
|
|||
|
<span class="token number">0</span> <span class="token number">0</span> ISTIO_IN_REDIRECT all -- any lo anywhere <span class="token operator">!</span>localhost owner <span class="token environment constant">UID</span> match <span class="token number">1337</span>
|
|||
|
<span class="token number">0</span> <span class="token number">0</span> RETURN all -- any lo anywhere anywhere <span class="token operator">!</span> owner <span class="token environment constant">UID</span> match <span class="token number">1337</span>
|
|||
|
<span class="token number">15</span> <span class="token number">900</span> RETURN all -- any any anywhere anywhere owner <span class="token environment constant">UID</span> match <span class="token number">1337</span>
|
|||
|
<span class="token number">0</span> <span class="token number">0</span> ISTIO_IN_REDIRECT all -- any lo anywhere <span class="token operator">!</span>localhost owner GID match <span class="token number">1337</span>
|
|||
|
<span class="token number">0</span> <span class="token number">0</span> RETURN all -- any lo anywhere anywhere <span class="token operator">!</span> owner GID match <span class="token number">1337</span>
|
|||
|
<span class="token number">0</span> <span class="token number">0</span> RETURN all -- any any anywhere anywhere owner GID match <span class="token number">1337</span>
|
|||
|
<span class="token number">0</span> <span class="token number">0</span> RETURN all -- any any anywhere localhost
|
|||
|
<span class="token number">0</span> <span class="token number">0</span> ISTIO_REDIRECT all -- any any anywhere anywhere
|
|||
|
|
|||
|
<span class="token comment"># ISTIO_REDIRECT 链:将所有流量重定向到 Sidecar(即本地) 的 15001 端口。</span>
|
|||
|
Chain ISTIO_REDIRECT <span class="token punctuation">(</span><span class="token number">1</span> references<span class="token punctuation">)</span>
|
|||
|
pkts bytes target prot opt <span class="token keyword">in</span> out <span class="token builtin class-name">source</span> destination
|
|||
|
<span class="token number">0</span> <span class="token number">0</span> REDIRECT tcp -- any any anywhere anywhere redir ports <span class="token number">15001</span>
|
|||
|
</code></pre>
|
|||
|
<p>下图展示的是 <code>productpage</code> 服务请求访问 <code>http://reviews.default.svc.cluster.local:9080/</code>,当流量进入 <code>reviews</code> 服务内部时,<code>reviews</code> 服务内部的 sidecar proxy 是如何做流量拦截和路由转发的。</p>
|
|||
|
<figure id="fig6.3.2.5.2"><a href="../images/envoy-sidecar-traffic-interception-jimmysong-blog.png" data-lightbox="722a5bdb-b850-48ce-a353-a81ac1fed49b" data-title="Sidecar 流量劫持示意图"><img src="../images/envoy-sidecar-traffic-interception-jimmysong-blog.png" alt="Sidecar 流量劫持示意图"></a><figcaption>图 6.3.2.5.2:Sidecar 流量劫持示意图</figcaption></figure>
|
|||
|
<p>第一步开始时,<code>productpage</code> Pod 中的 sidecar 已经通过 EDS 选择出了要请求的 <code>reviews</code> 服务的一个 Pod,知晓了其 IP 地址,发送 TCP 连接请求。</p>
|
|||
|
<p><code>reviews</code> 服务有三个版本,每个版本有一个实例,三个版本中的 sidecar 工作步骤类似,下文只以其中一个 Pod 中的 sidecar 流量转发步骤来说明。</p>
|
|||
|
<h3 id="理解-iptables">理解 iptables</h3>
|
|||
|
<p><code>iptables</code> 是 Linux 内核中的防火墙软件 netfilter 的管理工具,位于用户空间,同时也是 netfilter 的一部分。Netfilter 位于内核空间,不仅有网络地址转换的功能,也具备数据包内容修改、以及数据包过滤等防火墙功能。</p>
|
|||
|
<p>在了解 Init 容器初始化的 iptables 之前,我们先来了解下 iptables 和规则配置。</p>
|
|||
|
<p>下图展示了 iptables 调用链。</p>
|
|||
|
<figure id="fig6.3.2.5.3"><a href="../images/iptables.jpg" data-lightbox="da4f1098-1097-45ad-8a0c-60e912d64699" data-title="iptables 调用链"><img src="../images/iptables.jpg" alt="iptables 调用链"></a><figcaption>图 6.3.2.5.3:iptables 调用链</figcaption></figure>
|
|||
|
<h3 id="iptables-中的表">iptables 中的表</h3>
|
|||
|
<p>Init 容器中使用的的 iptables 版本是 <code>v1.6.0</code>,共包含 5 张表:</p>
|
|||
|
<ol>
|
|||
|
<li><code>raw</code> 用于配置数据包,<code>raw</code> 中的数据包不会被系统跟踪。</li>
|
|||
|
<li><code>filter</code> 是用于存放所有与防火墙相关操作的默认表。</li>
|
|||
|
<li><code>nat</code> 用于 <a href="https://en.wikipedia.org/wiki/Network_address_translation" target="_blank">网络地址转换</a>(例如:端口转发)。</li>
|
|||
|
<li><code>mangle</code> 用于对特定数据包的修改(参考<a href="https://en.wikipedia.org/wiki/Mangled_packet" target="_blank">损坏数据包</a>)。</li>
|
|||
|
<li><code>security</code> 用于<a href="https://wiki.archlinux.org/index.php/Security#Mandatory_access_control" target="_blank">强制访问控制</a> 网络规则。</li>
|
|||
|
</ol>
|
|||
|
<p><strong>注</strong>:在本示例中只用到了 <code>nat</code> 表。</p>
|
|||
|
<p>不同的表中的具有的链类型如下表所示:</p>
|
|||
|
<table>
|
|||
|
<thead>
|
|||
|
<tr>
|
|||
|
<th>规则名称</th>
|
|||
|
<th>raw</th>
|
|||
|
<th>filter</th>
|
|||
|
<th>nat</th>
|
|||
|
<th>mangle</th>
|
|||
|
<th>security</th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr>
|
|||
|
<td>PREROUTING</td>
|
|||
|
<td>✓</td>
|
|||
|
<td></td>
|
|||
|
<td>✓</td>
|
|||
|
<td>✓</td>
|
|||
|
<td></td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td>INPUT</td>
|
|||
|
<td></td>
|
|||
|
<td>✓</td>
|
|||
|
<td>✓</td>
|
|||
|
<td>✓</td>
|
|||
|
<td>✓</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td>OUTPUT</td>
|
|||
|
<td></td>
|
|||
|
<td>✓</td>
|
|||
|
<td>✓</td>
|
|||
|
<td>✓</td>
|
|||
|
<td>✓</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td>POSTROUTING</td>
|
|||
|
<td></td>
|
|||
|
<td></td>
|
|||
|
<td>✓</td>
|
|||
|
<td>✓</td>
|
|||
|
<td></td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td>FORWARD</td>
|
|||
|
<td>✓</td>
|
|||
|
<td>✓</td>
|
|||
|
<td></td>
|
|||
|
<td>✓</td>
|
|||
|
<td>✓</td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
<p>关于 iptables 的详细介绍请参考<a href="https://www.aliang.org/Linux/iptables.html" target="_blank">常见 iptables 使用规则场景整理</a>。</p>
|
|||
|
<h3 id="理解-iptables-规则">理解 iptables 规则</h3>
|
|||
|
<p>查看 <code>istio-proxy</code> 容器中的默认的 iptables 规则,默认查看的是 filter 表中的规则。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ iptables -L -v
|
|||
|
Chain INPUT <span class="token punctuation">(</span>policy ACCEPT 350K packets, 63M bytes<span class="token punctuation">)</span>
|
|||
|
pkts bytes target prot opt <span class="token keyword">in</span> out <span class="token builtin class-name">source</span> destination
|
|||
|
|
|||
|
Chain FORWARD <span class="token punctuation">(</span>policy ACCEPT <span class="token number">0</span> packets, <span class="token number">0</span> bytes<span class="token punctuation">)</span>
|
|||
|
pkts bytes target prot opt <span class="token keyword">in</span> out <span class="token builtin class-name">source</span> destination
|
|||
|
|
|||
|
Chain OUTPUT <span class="token punctuation">(</span>policy ACCEPT 18M packets, 1916M bytes<span class="token punctuation">)</span>
|
|||
|
pkts bytes target prot opt <span class="token keyword">in</span> out <span class="token builtin class-name">source</span> destination
|
|||
|
</code></pre>
|
|||
|
<p>我们看到三个默认的链,分别是 INPUT、FORWARD 和 OUTPUT,每个链中的第一行输出表示链名称(在本例中为INPUT/FORWARD/OUTPUT),后跟默认策略(ACCEPT)。</p>
|
|||
|
<p>下图是 iptables 的建议结构图,流量在经过 INPUT 链之后就进入了上层协议栈,比如</p>
|
|||
|
<p>每条链中都可以添加多条规则,规则是按照顺序从前到后执行的。我们来看下规则的表头定义。</p>
|
|||
|
<ul>
|
|||
|
<li><strong>pkts</strong>:处理过的匹配的报文数量</li>
|
|||
|
<li><strong>bytes</strong>:累计处理的报文大小(字节数)</li>
|
|||
|
<li><strong>target</strong>:如果报文与规则匹配,指定目标就会被执行。</li>
|
|||
|
<li><strong>prot</strong>:协议,例如 <code>tdp</code>、<code>udp</code>、<code>icmp</code> 和 <code>all</code>。</li>
|
|||
|
<li><strong>opt</strong>:很少使用,这一列用于显示 IP 选项。</li>
|
|||
|
<li><strong>in</strong>:入站网卡。</li>
|
|||
|
<li><strong>out</strong>:出站网卡。</li>
|
|||
|
<li><strong>source</strong>:流量的源 IP 地址或子网,后者是 <code>anywhere</code>。</li>
|
|||
|
<li><strong>destination</strong>:流量的目的地 IP 地址或子网,或者是 <code>anywhere</code>。</li>
|
|||
|
</ul>
|
|||
|
<p>还有一列没有表头,显示在最后,表示规则的选项,作为规则的扩展匹配条件,用来补充前面的几列中的配置。<code>prot</code>、<code>opt</code>、<code>in</code>、<code>out</code>、<code>source</code> 和 <code>destination</code> 和显示在 <code>destination</code> 后面的没有表头的一列扩展条件共同组成匹配规则。当流量匹配这些规则后就会执行 <code>target</code>。</p>
|
|||
|
<p>关于 iptables 规则请参考<a href="https://www.aliang.org/Linux/iptables.html" target="_blank">常见 iptables 使用规则场景整理</a>。</p>
|
|||
|
<p><strong>target 支持的类型</strong></p>
|
|||
|
<p><code>target</code> 类型包括 ACCEPT<code>、REJECT</code>、<code>DROP</code>、<code>LOG</code> 、<code>SNAT</code>、<code>MASQUERADE</code>、<code>DNAT</code>、<code>REDIRECT</code>、<code>RETURN</code> 或者跳转到其他规则等。只要执行到某一条链中只有按照顺序有一条规则匹配后就可以确定报文的去向了,除了 <code>RETURN</code> 类型,类似编程语言中的 <code>return</code> 语句,返回到它的调用点,继续执行下一条规则。<code>target</code> 支持的配置详解请参考 <a href="http://www.zsythink.net/archives/1199" target="_blank">iptables 详解(1):iptables 概念</a>。</p>
|
|||
|
<p>从输出结果中可以看到 Init 容器没有在 iptables 的默认链路中创建任何规则,而是创建了新的链路。</p>
|
|||
|
<h2 id="流量路由过程详解">流量路由过程详解</h2>
|
|||
|
<p>流量路由分为 Inbound 和 Outbound 两个过程,下面将根据上文中的示例及 sidecar 的配置为读者详细分析此过程。</p>
|
|||
|
<h3 id="理解-inbound-handler">理解 Inbound Handler</h3>
|
|||
|
<p>Inbound handler 的作用是将 iptables 拦截到的 downstream 的流量转交给 localhost,与 Pod 内的应用程序容器建立连接。假设其中一个 Pod 的名字是 <code>reviews-v1-54b8794ddf-jxksn</code>,运行 <code>istioctl proxy-config listener reviews-v1-54b8794ddf-jxksn</code> 查看该 Pod 中的具有哪些 Listener。</p>
|
|||
|
<pre class="language-"><code class="lang-ini">ADDRESS PORT TYPE
|
|||
|
172.17.0.15 9080 HTTP <--- 接收所有 Inbound HTTP 流量,该地址即为业务进程的真实监听地址
|
|||
|
172.17.0.15 15020 TCP <--- Ingress Gateway,Pilot 健康检查
|
|||
|
10.109.20.166 15012 TCP <--- Istiod http dns
|
|||
|
10.103.34.135 14250 TCP <--+
|
|||
|
10.103.34.135 14267 TCP |
|
|||
|
10.103.34.135 14268 TCP |
|
|||
|
10.104.122.175 15020 TCP |
|
|||
|
10.104.122.175 15029 TCP |
|
|||
|
10.104.122.175 15030 TCP |
|
|||
|
10.104.122.175 15031 TCP |
|
|||
|
10.104.122.175 15032 TCP |
|
|||
|
10.104.122.175 15443 TCP |
|
|||
|
10.104.122.175 31400 TCP | 接收与 0.0.0.0:15006 监听器配对的 Outbound 流量
|
|||
|
10.104.122.175 443 TCP |
|
|||
|
10.104.62.18 15443 TCP |
|
|||
|
10.104.62.18 443 TCP |
|
|||
|
10.106.201.253 16686 TCP |
|
|||
|
10.109.20.166 443 TCP |
|
|||
|
10.96.0.1 443 TCP |
|
|||
|
10.96.0.10 53 TCP |
|
|||
|
10.96.0.10 9153 TCP |
|
|||
|
10.98.184.149 15011 TCP |
|
|||
|
10.98.184.149 15012 TCP |
|
|||
|
10.98.184.149 443 TCP |
|
|||
|
0.0.0.0 14250 TCP |
|
|||
|
0.0.0.0 15010 TCP |
|
|||
|
0.0.0.0 15014 TCP |
|
|||
|
0.0.0.0 15090 HTTP |
|
|||
|
0.0.0.0 20001 TCP |
|
|||
|
0.0.0.0 3000 TCP |
|
|||
|
0.0.0.0 80 TCP |
|
|||
|
0.0.0.0 8080 TCP |
|
|||
|
0.0.0.0 9080 TCP |
|
|||
|
0.0.0.0 9090 TCP |
|
|||
|
0.0.0.0 9411 TCP <--+
|
|||
|
0.0.0.0 15001 TCP <--- 接收所有经 iptables 拦截的 Outbound 流量并转交给虚拟监听器处理
|
|||
|
0.0.0.0 15006 TCP <--- 接收所有经 iptables 拦截的 Inbound 流量并转交给虚拟监听器处理
|
|||
|
</code></pre>
|
|||
|
<p>当来自 <code>productpage</code> 的流量抵达 <code>reviews</code> Pod 的时候,downstream 已经明确知道 Pod 的 IP 地址为 <code>172.17.0.16</code> 所以才会访问该 Pod,所以该请求是 <code>172.17.0.15:9080</code>。</p>
|
|||
|
<p><strong><code>virtualInbound</code> Listener</strong></p>
|
|||
|
<p>从该 Pod 的 Listener 列表中可以看到,<code>0.0.0.0:15006/TCP</code> 的 Listener(其实际名字是 <code>virtualInbound</code>)监听所有的 Inbound 流量,下面是该 Listener 的详细配置。</p>
|
|||
|
<pre class="language-"><code class="lang-json"><span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"virtualInbound"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"address"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"socketAddress"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"address"</span><span class="token operator">:</span> <span class="token string">"0.0.0.0"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"portValue"</span><span class="token operator">:</span> <span class="token number">15006</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"filterChains"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"filters"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token comment">/*省略部分内容*/</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"filterChainMatch"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"destinationPort"</span><span class="token operator">:</span> <span class="token number">9080</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"prefixRanges"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"addressPrefix"</span><span class="token operator">:</span> <span class="token string">"172.17.0.15"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"prefixLen"</span><span class="token operator">:</span> <span class="token number">32</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"applicationProtocols"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token string">"istio-peer-exchange"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"istio"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"istio-http/1.0"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"istio-http/1.1"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"istio-h2"</span>
|
|||
|
<span class="token punctuation">]</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"filters"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"envoy.filters.network.metadata_exchange"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"config"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"protocol"</span><span class="token operator">:</span> <span class="token string">"istio-peer-exchange"</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"envoy.http_connection_manager"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"typedConfig"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"@type"</span><span class="token operator">:</span> <span class="token string">"type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"statPrefix"</span><span class="token operator">:</span> <span class="token string">"inbound_172.17.0.15_9080"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"routeConfig"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"inbound|9080|http|reviews.default.svc.cluster.local"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"virtualHosts"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"inbound|http|9080"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"domains"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token string">"*"</span>
|
|||
|
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"routes"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"default"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"match"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"prefix"</span><span class="token operator">:</span> <span class="token string">"/"</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"route"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"cluster"</span><span class="token operator">:</span> <span class="token string">"inbound|9080|http|reviews.default.svc.cluster.local"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"timeout"</span><span class="token operator">:</span> <span class="token string">"0s"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"maxGrpcTimeout"</span><span class="token operator">:</span> <span class="token string">"0s"</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"decorator"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"operation"</span><span class="token operator">:</span> <span class="token string">"reviews.default.svc.cluster.local:9080/*"</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"validateClusters"</span><span class="token operator">:</span> <span class="token boolean">false</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token comment">/*省略部分内容*/</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
</code></pre>
|
|||
|
<p>Inbound handler 的流量被 <code>virtualInbound</code> Listener 转移到 <code>172.17.0.15_9080</code> Listener,我们在查看下该 Listener 配置。</p>
|
|||
|
<p>运行 <code>istioctl pc listener reviews-v1-54b8794ddf-jxksn --address 172.17.0.15 --port 9080 -o json</code> 查看。</p>
|
|||
|
<pre class="language-"><code class="lang-json"><span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"172.17.0.15_9080"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"address"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"socketAddress"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"address"</span><span class="token operator">:</span> <span class="token string">"172.17.0.15"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"portValue"</span><span class="token operator">:</span> <span class="token number">9080</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"filterChains"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"filterChainMatch"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"applicationProtocols"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token string">"istio-peer-exchange"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"istio"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"istio-http/1.0"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"istio-http/1.1"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"istio-h2"</span>
|
|||
|
<span class="token punctuation">]</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"filters"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"envoy.http_connection_manager"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"config"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
...
|
|||
|
<span class="token property">"routeConfig"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"inbound|9080|http|reviews.default.svc.cluster.local"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"virtualHosts"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"inbound|http|9080"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"domains"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token string">"*"</span>
|
|||
|
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"routes"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"default"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"match"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"prefix"</span><span class="token operator">:</span> <span class="token string">"/"</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"route"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"cluster"</span><span class="token operator">:</span> <span class="token string">"inbound|9080|http|reviews.default.svc.cluster.local"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"timeout"</span><span class="token operator">:</span> <span class="token string">"0s"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"maxGrpcTimeout"</span><span class="token operator">:</span> <span class="token string">"0s"</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"decorator"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"operation"</span><span class="token operator">:</span> <span class="token string">"reviews.default.svc.cluster.local:9080/*"</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
...
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"filterChainMatch"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"transportProtocol"</span><span class="token operator">:</span> <span class="token string">"tls"</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"tlsContext"</span><span class="token operator">:</span> <span class="token punctuation">{</span>...
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"filters"</span><span class="token operator">:</span> <span class="token punctuation">[</span>...
|
|||
|
<span class="token punctuation">]</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|||
|
...
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">]</span>
|
|||
|
</code></pre>
|
|||
|
<p>我们看其中的 <code>filterChains.filters</code> 中的 <code>envoy.http_connection_manager</code> 配置部分,该配置表示流量将转交给Cluster<code>inbound|9080|http|reviews.default.svc.cluster.local</code> 处理。</p>
|
|||
|
<p><strong><a href="https://www.servicemesher.com/istio-handbook/GLOSSARY.html#cluster" target="_blank">Cluster</a> <code>inbound|9080|http|reviews.default.svc.cluster.local</code></strong></p>
|
|||
|
<p>运行 <code>istioctl proxy-config cluster reviews-v1-54b8794ddf-jxksn --fqdn reviews.default.svc.cluster.local --direction inbound -o json</code> 查看该Cluster的配置如下。</p>
|
|||
|
<pre class="language-"><code class="lang-json"><span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"inbound|9080|http|reviews.default.svc.cluster.local"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"STATIC"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"connectTimeout"</span><span class="token operator">:</span> <span class="token string">"1s"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"loadAssignment"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"clusterName"</span><span class="token operator">:</span> <span class="token string">"inbound|9080|http|reviews.default.svc.cluster.local"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"endpoints"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"lbEndpoints"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"endpoint"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"address"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"socketAddress"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"address"</span><span class="token operator">:</span> <span class="token string">"127.0.0.1"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"portValue"</span><span class="token operator">:</span> <span class="token number">9080</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"circuitBreakers"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"thresholds"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"maxConnections"</span><span class="token operator">:</span> <span class="token number">4294967295</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"maxPendingRequests"</span><span class="token operator">:</span> <span class="token number">4294967295</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"maxRequests"</span><span class="token operator">:</span> <span class="token number">4294967295</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"maxRetries"</span><span class="token operator">:</span> <span class="token number">4294967295</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span>
|
|||
|
</code></pre>
|
|||
|
<p>可以看到该Cluster的 Endpoint 直接对应的就是 localhost,再经过 iptables 转发流量就被应用程序容器消费了。</p>
|
|||
|
<h3 id="理解-outbound-handler">理解 Outbound Handler</h3>
|
|||
|
<p>因为 <code>reviews</code> 会向 <code>ratings</code> 服务发送 HTTP 请求,请求的地址是:<code>http://ratings.default.svc.cluster.local:9080/</code>,Outbound handler 的作用是将 iptables 拦截到的本地应用程序发出的流量,经由 sidecar 判断如何路由到 upstream。</p>
|
|||
|
<p>应用程序容器发出的请求为 Outbound 流量,被 iptables 劫持后转移给 Outbound handler 处理,然后经过 <code>virtualOutbound</code> Listener、<code>0.0.0.0_9080</code> Listener,然后通过 Route 9080 找到 upstream 的 cluster,进而通过 EDS 找到 Endpoint 执行路由动作。</p>
|
|||
|
<p><strong>Route <code>ratings.default.svc.cluster.local:9080</code></strong></p>
|
|||
|
<p><code>reviews</code> 会请求 <code>ratings</code> 服务,运行 <code>istioctl proxy-config routes reviews-v1-54b8794ddf-jxksn --name 9080 -o json</code> 查看 route 配置,因为 sidecar 会根据 HTTP header 中的 domains 来匹配 VirtualHost,所以下面只列举了 <code>ratings.default.svc.cluster.local:9080</code> 这一个 VirtualHost。</p>
|
|||
|
<pre class="language-"><code class="lang-json"><span class="token punctuation">[</span><span class="token punctuation">{</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"ratings.default.svc.cluster.local:9080"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"domains"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token string">"ratings.default.svc.cluster.local"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"ratings.default.svc.cluster.local:9080"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"ratings"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"ratings:9080"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"ratings.default.svc.cluster"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"ratings.default.svc.cluster:9080"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"ratings.default.svc"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"ratings.default.svc:9080"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"ratings.default"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"ratings.default:9080"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"10.98.49.62"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token string">"10.98.49.62:9080"</span>
|
|||
|
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"routes"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"default"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"match"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"prefix"</span><span class="token operator">:</span> <span class="token string">"/"</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"route"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"cluster"</span><span class="token operator">:</span> <span class="token string">"outbound|9080||ratings.default.svc.cluster.local"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"timeout"</span><span class="token operator">:</span> <span class="token string">"0s"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"retryPolicy"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"retryOn"</span><span class="token operator">:</span> <span class="token string">"connect-failure,refused-stream,unavailable,cancelled,resource-exhausted,retriable-status-codes"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"numRetries"</span><span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"retryHostPredicate"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"envoy.retry_host_predicates.previous_hosts"</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"hostSelectionRetryMaxAttempts"</span><span class="token operator">:</span> <span class="token string">"5"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"retriableStatusCodes"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token number">503</span>
|
|||
|
<span class="token punctuation">]</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"maxGrpcTimeout"</span><span class="token operator">:</span> <span class="token string">"0s"</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"decorator"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"operation"</span><span class="token operator">:</span> <span class="token string">"ratings.default.svc.cluster.local:9080/*"</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
..<span class="token punctuation">]</span>
|
|||
|
</code></pre>
|
|||
|
<p>从该 Virtual Host 配置中可以看到将流量路由到Cluster<code>outbound|9080||ratings.default.svc.cluster.local</code>。</p>
|
|||
|
<p><strong>Endpoint <code>outbound|9080||ratings.default.svc.cluster.local</code></strong></p>
|
|||
|
<p>运行 <code>istioctl proxy-config endpoint reviews-v1-54b8794ddf-jxksn --port 9080 -o json</code> 查看 Endpoint 配置,我们只选取其中的 <code>outbound|9080||ratings.default.svc.cluster.local</code>Cluster的结果如下。</p>
|
|||
|
<pre class="language-"><code class="lang-json"><span class="token punctuation">{</span>
|
|||
|
<span class="token property">"clusterName"</span><span class="token operator">:</span> <span class="token string">"outbound|9080||ratings.default.svc.cluster.local"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"endpoints"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"locality"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"lbEndpoints"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|||
|
<span class="token punctuation">{</span>
|
|||
|
<span class="token property">"endpoint"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"address"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"socketAddress"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"address"</span><span class="token operator">:</span> <span class="token string">"172.33.100.2"</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"portValue"</span><span class="token operator">:</span> <span class="token number">9080</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|||
|
<span class="token property">"metadata"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"filterMetadata"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"istio"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|||
|
<span class="token property">"uid"</span><span class="token operator">:</span> <span class="token string">"kubernetes://ratings-v1-8558d4458d-ns6lk.default"</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
<span class="token punctuation">]</span>
|
|||
|
<span class="token punctuation">}</span>
|
|||
|
</code></pre>
|
|||
|
<p>Endpoint 可以是一个或多个,sidecar 将根据一定规则选择适当的 Endpoint 来路由。至此 Review 服务找到了它 upstream 服务 Rating 的 Endpoint。</p>
|
|||
|
<h2 id="小结">小结</h2>
|
|||
|
<p>本文使用了 Istio 官方提供的 bookinfo 示例,按图索骥得带领读者了解了 sidecar 注入、iptables 透明流量劫持及 sidecar 中流量路由背后的实现细节。Sidecar 模式和流量透明劫持是 Istio 服务网格的特色和基础功能,理解该功能的背后过程及实现细节,将有助于大家理解 Service Mesh 的原理和 <a href="https://www.servicemesher.com/istio-handbook/" target="_blank">Istio Handbook</a> 后面章节中的内容,因此希望读者可以在自己的环境中从头来试验一遍以加深理解。</p>
|
|||
|
<p>使用 iptables 做流量劫持只是 service mesh 的数据平面中做流量劫持的方式之一,还有更多的流量劫持方案,下面引用自 <a href="https://mosn.io/zh/docs/concept/traffic-hijack/" target="_blank">云原生网络代理 MOSN 官网中给出的流量劫持</a>部分的描述。</p>
|
|||
|
<h3 id="使用-iptables-做流量劫持时存在的问题">使用 iptables 做流量劫持时存在的问题</h3>
|
|||
|
<p>目前 Istio 使用 iptables 实现透明劫持,主要存在以下三个问题:</p>
|
|||
|
<ol>
|
|||
|
<li>需要借助于 conntrack 模块实现连接跟踪,在连接数较多的情况下,会造成较大的消耗,同时可能会造成 track 表满的情况,为了避免这个问题,业内有关闭 conntrack 的做法。</li>
|
|||
|
<li>iptables 属于常用模块,全局生效,不能显式的禁止相关联的修改,可管控性比较差。</li>
|
|||
|
<li>iptables 重定向流量本质上是通过 loopback 交换数据,outbond 流量将两次穿越协议栈,在大并发场景下会损失转发性能。</li>
|
|||
|
</ol>
|
|||
|
<p>上述几个问题并非在所有场景中都存在,比方说某些场景下,连接数并不多,且 NAT 表未被使用到的情况下,iptables 是一个满足要求的简单方案。为了适配更加广泛的场景,透明劫持需要解决上述三个问题。</p>
|
|||
|
<h3 id="透明劫持方案优化">透明劫持方案优化</h3>
|
|||
|
<p><strong>使用 tproxy 处理 inbound 流量</strong></p>
|
|||
|
<p>tproxy 可以用于 inbound 流量的重定向,且无需改变报文中的目的 IP/端口,不需要执行连接跟踪,不会出现 conntrack 模块创建大量连接的问题。受限于内核版本,tproxy 应用于 outbound 存在一定缺陷。目前 Istio 支持通过 tproxy 处理 inbound 流量。</p>
|
|||
|
<p><strong>使用 hook connect 处理 outbound 流量</strong></p>
|
|||
|
<p>为了适配更多应用场景,outbound 方向通过 hook connect 来实现,实现原理如下:</p>
|
|||
|
<figure id="fig6.3.2.5.4"><a href="../images/hook-connect.jpg" data-lightbox="640e65e6-df02-4495-9a26-a8c72d211d1b" data-title="hook-connect 原理示意图"><img src="../images/hook-connect.jpg" alt="hook-connect 原理示意图"></a><figcaption>图 6.3.2.5.4:hook-connect 原理示意图</figcaption></figure>
|
|||
|
<p>无论采用哪种透明劫持方案,均需要解决获取真实目的 IP/端口的问题,使用 iptables 方案通过 getsockopt 方式获取,tproxy 可以直接读取目的地址,通过修改调用接口,hook connect 方案读取方式类似于tproxy。</p>
|
|||
|
<p>实现透明劫持后,在内核版本满足要求(4.16以上)的前提下,通过 sockmap 可以缩短报文穿越路径,进而改善 outbound 方向的转发性能。</p>
|
|||
|
<h2 id="参考">参考</h2>
|
|||
|
<ul>
|
|||
|
<li><a href="https://istio.io/docs/ops/diagnostic-tools/proxy-cmd/" target="_blank">Debugging Envoy and Istiod - istio.io</a></li>
|
|||
|
<li><a href="https://istio.io/zh/blog/2019/data-plane-setup/" target="_blank">揭开 Istio Sidecar 注入模型的神秘面纱 - istio.io</a></li>
|
|||
|
<li><a href="https://mosn.io/zh/docs/concept/traffic-hijack/" target="_blank">MOSN 作为 Sidecar 使用时的流量劫持方案 - mosn.io</a> </li>
|
|||
|
</ul>
|
|||
|
<footer class="page-footer"><span class="copyright"><a href="https://cloudnative.to/contact/" target="_blank">加入云原生社区·共谱云原生新篇章</a><p></p>Copyright © 2017-2020 | Distributed under <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh" target="_blank">CC BY 4.0</a> | <a href="https://jimmysong.io" target="_blank">jimmysong.io</a> all right reserved,powered by Gitbook</span><span class="footer-modification"> Updated at
|
|||
|
2020-06-19 06:47:50
|
|||
|
</span></footer>
|
|||
|
|
|||
|
</section>
|
|||
|
|
|||
|
</div>
|
|||
|
<div class="search-results">
|
|||
|
<div class="has-results">
|
|||
|
|
|||
|
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
|
|||
|
<ul class="search-results-list"></ul>
|
|||
|
|
|||
|
</div>
|
|||
|
<div class="no-results">
|
|||
|
|
|||
|
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<a href="istio-tutorials-collection.html" class="navigation navigation-prev " aria-label="Previous page: Istio 免费学习资源汇总">
|
|||
|
<i class="fa fa-angle-left"></i>
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
<a href="envoy-sidecar-routing-of-istio-service-mesh-deep-dive.html" class="navigation navigation-next " aria-label="Next page: Envoy Sidecar 代理的路由转发">
|
|||
|
<i class="fa fa-angle-right"></i>
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
<script>
|
|||
|
var gitbook = gitbook || [];
|
|||
|
gitbook.push(function() {
|
|||
|
gitbook.page.hasChanged({"page":{"title":"Sidecar 的注入与流量劫持","level":"6.3.2.5","depth":3,"next":{"title":"Envoy Sidecar 代理的路由转发","level":"6.3.2.6","depth":3,"path":"usecases/envoy-sidecar-routing-of-istio-service-mesh-deep-dive.md","ref":"usecases/envoy-sidecar-routing-of-istio-service-mesh-deep-dive.md","articles":[]},"previous":{"title":"Istio 免费学习资源汇总","level":"6.3.2.4","depth":3,"path":"usecases/istio-tutorials-collection.md","ref":"usecases/istio-tutorials-collection.md","articles":[]},"dir":"ltr"},"config":{"plugins":["github","codesnippet","splitter","page-toc-button","image-captions","editlink","back-to-top-button","-lunr","-search","search-plus","github-buttons@2.1.0","favicon@^0.0.2","tbfed-pagefooter@^0.0.1","3-ba","theme-default","-highlight","prism","prism-themes","sitemap-general","lightbox","ga","copy-code-button","alerts"],"styles":{"ebook":"styles/ebook.css","epub":"styles/epub.css","mobi":"styles/mobi.css","pdf":"styles/pdf.css","print":"styles/print.css","website":"styles/website.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"<a href=https://cloudnative.to/contact/>加入云原生社区·共谱云原生新篇章</a></p>Copyright © 2017-2020 | Distributed under <a href=https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh>CC BY 4.0</a> | <a href=https://jimmysong.io>jimmysong.io</a>","modify_label":" Updated at ","modify_format":"YYYY-MM-DD HH:mm:ss"},"prism":{"css":["prism-themes/themes/prism-ghcolors.css"]},"github":{"url":"https://github.com/rootsongjc/kubernetes-handbook"},"editlink":{"label":"编辑本页","multilingual":false,"base":"https://github.com/rootsongjc/kubernetes-handbook/blob/master/"},"splitter":{},"codesnippet":{},"sitemap-general":{"prefix":"https://jimmysong.io/kubernetes-handbook/"},"fontsettings":{"theme":"white","family":"sans","size":2},"favicon":{"shortcut":"favicon.ico","bookmark":"favicon.ico"},"lightbox":{"jquery":true,"sameUuid":false},"page-toc-button":{},"back-to-top-button":{},"prism-themes":{},"alerts":{},"github-buttons":{"repo":"rootsongjc/kubernetes-handbook","types":["star"],"size":"small"},"3-ba":{"configuration":"auto","token":"11f7d254cfa4e0ca44b175c66d379ecc"},"copy-code-button":{},"ga":{"configuration":"auto","token":"UA-93485976-1"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"showLevel":true,"styles":{"ebook":"styles/ebook.css","epub":"styles/epub.css","mobi":"styles/mobi.css","pdf":"styles/pdf.css","print":"styles/print.css","website":"styles/website.css"}},"search-plus":{},"image-captions":{"caption":"图 _PAGE_LEVEL_._PAGE_IMAGE_NUMBER_:_CAPTION_","variable_name":"_pictures"}},"theme":"default","author":"Jimmy Song(宋净超)","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{"_pictures":[{"backlink":"index.html#fig1.1.1","level":"1.1","list_caption":"Figure: Stargazers over time","alt":"Stargazers over time","nro":1,"url":"https://starcharts.herokuapp.com/rootsongjc/kubernetes-handbook.svg","index":1,"caption_template":"图 _PAGE_LEVEL_._PAGE_IMAGE_NUMBER_:_CAPTION_","label":"Stargazers over time","attributes":{},"skip":false,"key":"1.1.1"},{"backlink":"cloud-native/play-with-kubernetes.html#fig2.3.1","level":"2.3","list_caption":"Figure: Play with Kubernetes网页截图","alt":"Play with Kubernetes网页截图","nro":2,"url":"../images/play-with-kubernetes.jpg","index":1,"caption_template":"图 _PAGE_LEVEL_._PAGE_IMAGE_NUMBER_:_CAPTION_","label":"Play with Kubernetes网页截图","attributes":{},"skip":false,"key":"2.3.1"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.1","level":"2.4","list_caption":"Figure: Kubernetes dashboard","alt":"Kubernetes dashboard","nro":3,"url":"http
|
|||
|
});
|
|||
|
</script>
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook.js"></script>
|
|||
|
<script src="../gitbook/theme.js"></script>
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-page-toc-button/plugin.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-back-to-top-button/plugin.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-search-plus/jquery.mark.min.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-search-plus/search.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-github-buttons/plugin.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-3-ba/plugin.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-lightbox/js/lightbox.min.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-ga/plugin.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-copy-code-button/toggle.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-alerts/plugin.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-sharing/buttons.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</body>
|
|||
|
</html>
|
|||
|
|