透明代理
如果您在 Kubnernetes 中运行,则可以使用 linkerd-inject 工具透明地通过 Daemonset linkerd 代理请求。该脚本在每个pod中运行一个initContainer,在每个pod上设置 iptables
规则,将流量转发到在 node 上运行的linkerd。请注意,此设置将所有出站流量代理到单个 linkerd 端口,因此如果使用多个协议,则不能工作。
使用 linkerd-inject
:
# install linkerd-inject
$ go get github.com/linkerd/linkerd-inject
# inject init container and deploy this config
$ kubectl apply -f <(linkerd-inject -f <your k8s config>.yml -linkerdPort 4140)
请注意,在 minikube 中,需要使用 -useServiceVip
标志。
如果不想使用脚本修改配置,则可以手动将以下 initContainer
规范插入到配置中:
initContainers:
- name: init-linkerd
image: linkerd/istio-init:v1
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
args:
- -p
- "4140" # port of the Daemonset linkerd's incoming router
- -s
- "L5D" # linkerd Daemonset service name, uppercased
- -m
- "false" # set to true if running in minikube
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
add:
- NET_ADMIN
非Kubernetes环境
设置 iptables 规则的 prepare-proxy.sh 脚本假设您运行在Kubernetes(并且您正在运行 Daemonset linkerd),但是也可以将 iptables
规则设置为在其他环境中透明地代理请求。如果您正在每个主机运行一个 linkerd,那么查看该文件中的 OUTPUT
链规则可以让您开始。