Linkerd 2.10 系列
- 快速上手 Linkerd v2.10 Service Mesh(服务网格)
- 腾讯云 K8S 集群实战 Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 应用
- 详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代
- Linkerd 2.10—将您的服务添加到 Linkerd
- Linkerd 2.10—自动化的金丝雀发布
- Linkerd 2.10—自动轮换控制平面 TLS 与 Webhook TLS 凭证
- Linkerd 2.10—如何配置外部 Prometheus 实例
- Linkerd 2.10—配置代理并发
- Linkerd 2.10—配置重试
- Linkerd 2.10—配置超时
- Linkerd 2.10—控制平面调试端点
- Linkerd 2.10—使用 Kustomize 自定义 Linkerd 的配置
- Linkerd 2.10—使用 Linkerd 进行分布式跟踪
- Linkerd 2.10—调试 502s
- Linkerd 2.10—使用每个路由指标调试 HTTP 应用程序
- Linkerd 2.10—使用请求跟踪调试 gRPC 应用程序
- Linkerd 2.10—导出指标
- Linkerd 2.10—暴露 Dashboard
- Linkerd 2.10—生成您自己的 mTLS 根证书
- Linkerd 2.10—获取每条路由指标
- Linkerd 2.10—混沌工程之注入故障
- Linkerd 2.10—优雅的 Pod 关闭
- Linkerd 2.10—Ingress 流量
Linkerd 2.10 中文手册持续修正更新中:
Linkerd 中的多集群支持需要在默认控制平面安装之上进行额外的安装和配置。
本指南将介绍此安装和配置以及您可能遇到的常见问题。
要求
- 两个集群。
- 每个集群中的控制平面安装共享一个公共信任锚。
- 这些集群中的每一个都应配置为
kubectl
contexts。 - 两个集群上的提升权限。我们将创建服务帐户并授予扩展权限,因此您需要能够在测试集群上执行此操作。
- 支持
east
集群中的LoadBalancer
类型的服务。
查看集群提供商(cluster provider)的文档或查看
inlets。
这是west
集群将用于通过网关与east
通信的内容。
步骤 1:安装多集群控制平面
在每个集群上,运行:
linkerd multicluster install | \
kubectl apply -f -
复制代码
要验证一切是否已成功启动,请运行:
linkerd multicluster check
复制代码
步骤 2:Link 集群
每个集群都必须 linked。
这包括在源集群中安装多个资源,包括一个包含允许
访问目标集群 Kubernetes API 的 kubeconfig 的 secret、
一个用于镜像服务(mirroring services
)的服务镜像控件(service mirror control
)以及一个
用于保存配置的 Link 自定义资源。
要将集群 west
连接到集群 east
,您将运行:
linkerd --context=east multicluster link --cluster-name east |
kubectl --context=west apply -f -
复制代码
要验证凭据(credentials
)已成功创建并且集群能够相互访问,请运行:
linkerd --context=west multicluster check
复制代码
您还应该通过运行以下命令看到网关列表。
请注意,您需要在源集群中安装 Linkerd 的 Viz 扩展以获取网关列表:
linkerd --context=west multicluster gateways
复制代码
有关此步骤的详细说明,请查看链接集群部分。
步骤 2:暴露 services
服务不会在链接的集群中自动镜像。
默认情况下,只会镜像带有 mirror.linkerd.io/exported
标签的服务。
对于您想要镜像到链接集群的每个服务,运行:
kubectl label svc foobar mirror.linkerd.io/exported=true
复制代码
您可以通过在 linkerd multicluster link
命令上使用 --selector
标志或
通过编辑由 linkerd multicluster link
命令
创建的链接资源来配置不同的标签选择器(different label selector
)。
利用 Ambassador
不需要捆绑的 Linkerd gateway
。
事实上,如果您有一个现有的 Ambassador
安装,那么使用它很容易!
通过使用现有的 Ambassador
安装,
您无需管理多个入口网关(multiple ingress gateways
)并为额外的云负载均衡器付费。
本指南假定 Ambassador 已安装到 ambassador
命名空间中。
首先,您需要使用 Linkerd 注入 ambassador
deployment:
kubectl -n ambassador get deploy ambassador -o yaml | \
linkerd inject \
--skip-inbound-ports 80,443 \
--require-identity-on-inbound-ports 4183 - | \
kubectl apply -f -
复制代码
这将添加 Linkerd 代理,
跳过 Ambassador
为公共流量处理的端口并要求网关端口上的 identity
。
接下来,您需要添加一些配置,以便 Ambassador
知道如何处理请求:
cat <<EOF | kubectl --context=${ctx} apply -f -
---
apiVersion: getambassador.io/v2
kind: Module
metadata:
name: ambassador
namespace: ambassador
spec:
config:
add_linkerd_headers: true
---
apiVersion: getambassador.io/v2
kind: Host
metadata:
name: wildcard
namespace: ambassador
spec:
hostname: "*"
selector:
matchLabels:
nothing: nothing
acmeProvider:
authority: none
requestPolicy:
insecure:
action: Route
---
apiVersion: getambassador.io/v2
kind: Mapping
metadata:
name: public-health-check
namespace: ambassador
spec:
prefix: /-/ambassador/ready
rewrite: /ambassador/v0/check_ready
service: localhost:8877
bypass_auth: true
EOF
复制代码
Ambassador service
和 deployment
定义需要稍作修补。
这会添加
service mirror controller
所需的元数据。要修补这些资源,请运行:
kubectl --context=${ctx} -n ambassador patch deploy ambassador -p='
spec:
template:
metadata:
annotations:
config.linkerd.io/enable-gateway: "true"
'
kubectl --context=${ctx} -n ambassador patch svc ambassador --type='json' -p='[
{"op":"add","path":"/spec/ports/-", "value":{"name": "mc-gateway", "port": 4143}},
{"op":"replace","path":"/spec/ports/0", "value":{"name": "mc-probe", "port": 80, "targetPort": 8080}}
]'
kubectl --context=${ctx} -n ambassador patch svc ambassador -p='
metadata:
annotations:
mirror.linkerd.io/gateway-identity: ambassador.ambassador.serviceaccount.identity.linkerd.cluster.local
mirror.linkerd.io/multicluster-gateway: "true"
mirror.linkerd.io/probe-path: /-/ambassador/ready
mirror.linkerd.io/probe-period: "3"
'
复制代码
现在您可以将 Linkerd 多集群组件安装到您的目标集群上。
由于我们使用 Ambassador 作为我们的网关,
我们需要使用 --gateway=false
标志跳过安装 Linkerd 网关:
linkerd --context=${ctx} multicluster install --gateway=false | kubectl --context=${ctx} apply -f -
复制代码
完成所有设置和配置后,您就可以将源集群链接到这个 Ambassador 网关了。
运行 link
命令,指定 Ambassador service 的名称和命名空间:
linkerd --context=${ctx} multicluster link --cluster-name=${ctx} --gateway-name=ambassador --gateway-namespace=ambassador \
| kubectl --context=${src_ctx} apply -f -
复制代码
从源集群(未运行 Ambassador 的集群),您可以通过运行以下命令来验证一切是否正常工作:
linkerd multicluster check
复制代码
此外,在列出活动网关时会显示 ambassador
网关:
linkerd multicluster gateways
复制代码
信任锚捆绑
为了保护集群之间的连接,Linkerd 需要有一个共享的信任锚。
这允许控制平面加密在集群之间传递的请求并验证这些请求的身份。
此身份用于控制对集群的访问,因此共享信任锚至关重要。
最简单的方法是在多个集群之间共享一个信任锚证书。
如果您有一个现有的 Linkerd 安装并丢弃了信任锚 key,
则可能无法为信任锚提供单个证书。
幸运的是,信任锚也可以是一堆证书!
要获取现有集群的信任锚,请运行:
kubectl -n linkerd get cm linkerd-config -ojsonpath="{.data.values}" | \
yq e .identityTrustAnchorsPEM - > trustAnchor.crt
复制代码
此命令需要 yq。
如果您没有 yq,请随意使用您选择的工具从 identityTrustAnchorsPEM
字段中提取证书。`
现在,您需要为新集群创建一个新的信任锚(trust anchor)和颁发者(issuer):
step certificate create root.linkerd.cluster.local root.crt root.key \
--profile root-ca --no-password --insecure
step certificate create identity.linkerd.cluster.local issuer.crt issuer.key \
--profile intermediate-ca --not-after 8760h --no-password --insecure \
--ca root.crt --ca-key root.key
复制代码
我们使用 step cli 生成证书。
openssl
也能正常工作!
使用旧集群的信任锚和新集群的信任锚,您可以通过运行以下命令来创建捆绑包:
cat trustAnchor.crt root.crt > bundle.crt
复制代码
您需要使用新捆绑包(new bundle)升级现有集群。
确保您希望与新集群通信的每个 pod 都重新启动,
以便它可以使用此包。要使用这个新的
信任锚包(trust anchor bundle)升级现有集群,请运行:
linkerd upgrade --identity-trust-anchors-file=./bundle.crt | \
kubectl apply -f -
复制代码
最后,您将能够使用您刚刚创建的信任锚包(trust anchor bundle)以及颁发者证书(
issuer certificate)和密钥(key)在新集群上安装 Linkerd。
linkerd install \
--identity-trust-anchors-file bundle.crt \
--identity-issuer-certificate-file issuer.crt \
--identity-issuer-key-file issuer.key | \
kubectl apply -f -
复制代码
确保通过对每个集群运行 check
来验证集群是否已成功启动。
linkerd check
复制代码
通过 Helm 安装多集群控制平面组件
Linkerd 的多集群组件,即 Gateway 和 Service Mirror 可以
通过 Helm 而不是 linkerd multicluster install
命令安装。
这不仅允许进行高级配置,还允许用户将多集群安装捆绑为他们
现有的基于 Helm 的安装管道的一部分。
添加 Linkerd 的 Helm 存储库
首先,让我们通过运行以下命令添加 Linkerd 的 Helm repo
# To add the repo for Linkerd2 stable releases:
helm repo add linkerd https://helm.linkerd.io/stable
复制代码
Helm 多集群安装过程
helm install linkerd2-multicluster linkerd/linkerd2-multicluster
复制代码
chart values 将从 chart 的 values.yaml
文件中选取。
您可以通过提供您自己的 values.yaml
文件并使用 -f
选项来覆盖该文件中的值,
或者使用 --set
标志系列覆盖特定值。
可以在
此处
找到全套配置选项
可以通过运行以下命令来验证安装
linkerd multicluster check
复制代码
网关的安装可以通过 gateway
设置禁用。默认情况下,此值为 true。
安装额外的访问凭证
当使用 linkerd multicluster install
将
多集群组件安装到目标集群上时,
会创建一个服务帐户,源集群将使用该帐户来镜像服务。
为每个源集群使用不同的服务帐户会很有好处,因为它使您能够从特定源集群撤消服务镜像访问。
可以通过 CLI 使用 linkerd multicluster allow
命令
生成额外的服务帐户和关联的 RBAC。
也可以通过 Helm 将 remoteMirrorServiceAccountName
值设置为 list 来完成相同的功能。
helm install linkerd2-mc-source linkerd/linkerd2-multicluster --set remoteMirrorServiceAccountName={source1\,source2\,source3} --kube-context target
复制代码
我是为少
微信:uuhells123
公众号:黑客下午茶
加我微信(互相学习交流),关注公众号(获取更多学习资料~)
复制代码