Istio网格扩展
将虚拟机和裸机主机集成到部署在Kubernetes上的Istio网格中的说明如下。
先决条件
- 按照安装指南中的说明在Kubernetes上安装Istio 。
- 机器必须具有到网格中节点的IP连接。这通常需要一个VPC或一个VPN,以及一个提供直接(没有NAT或防火墙拒绝)路由到节点的容器网络。机器不需要访问由Kubernetes分配的集群IP地址。
- Istio控制平面服务(Pilot,Mixer,CA)和Kubernetes DNS服务器必须可以从虚拟机中访问。这通常是使用内部负载均衡器完成的。您也可以使用NodePort,在虚拟机上运行Istio组件,或使用自定义网络配置,单独的文档将覆盖这些高级配置。
安装步骤
安装程序包括准备用于扩展,安装和配置每个虚拟机的网格。
作为发行包的一部分,以及install / tools / setupMeshEx.sh中提供了一个帮助Kubernetes安装的示例脚本。检查支持的脚本内容和环境变量(如GCP_OPTS)。
帮助配置计算机的示例脚本可作为发行包的一部分,也可以在install / tools / setupIstioVM.sh中找到。您应该根据您的配置工具和DNS要求对其进行自定义。
准备Kubernetes集群进行扩展
- 为Kube DNS,Pilot,Mixer和CA设置内部负载均衡器(ILB)。这一步是特定于每个云提供商,所以你可能需要编辑注释。
kubectl apply -f install/kubernetes/mesh-expansion.yaml
- 生成Istio ‘cluster.env’配置并部署在虚拟机中。该文件包含要拦截的集群IP地址范围。
export GCP_OPTS="--zone MY_ZONE --project MY_PROJECT" install/tools/setupMeshEx.sh generateClusterEnv MY_CLUSTER_NAME
生成文件示例:
cat cluster.env
ISTIO_SERVICE_CIDR=10.63.240.0/20
- 生成在虚拟机中使用的DNS配置文件。这将允许VM上的应用程序解析集群服务名称,这些名称将被sidecar拦截并转发。
# Make sure your kubectl context is set to your cluster install/tools/setupMeshEx.sh generateDnsmasq
生成文件示例:
cat kubedns
server=/svc.cluster.local/10.150.0.7
address=/istio-mixer/10.150.0.8
address=/istio-pilot/10.150.0.6
address=/istio-ca/10.150.0.9
address=/istio-mixer.istio-system/10.150.0.8
address=/istio-pilot.istio-system/10.150.0.6
address=/istio-ca.istio-system/10.150.0.9
设置机器
例如,您可以使用以下“全包”脚本来复制和安装设置:
# Check what the script does to see that it meets your needs.
export GCP_OPTS="--zone MY_ZONE --project MY_PROJECT"
# change to the namespace you wish to use for VMs but 'vm' is what the bookinfo guide assumes
export SERVICE_NAMESPACE=vm
install/tools/setupMeshEx.sh machineSetup VM_NAME
或者等效的手动步骤:
–手动设置步骤开始–
- 将配置文件和Istio Debian文件复制到加入集群的每台机器上。将文件保存为/etc/dnsmasq.d/kubedns和/var/lib/istio/envoy/cluster.env。
- 配置和验证DNS设置。这可能需要安装dnsmasq并直接或通过DHCP脚本添加到/etc/resolv.conf中。要验证,请检查虚拟机是否可以解析名称并连接到pilot,例如:
在VM /外部主机上:
host istio-pilot.istio-system
生成消息示例:
# Verify you get the same address as shown as "EXTERNAL-IP" in 'kubectl get svc -n istio-system istio-pilot-ilb'
istio-pilot.istio-system has address 10.150.0.6
检查您是否可以解决集群IP。实际地址将取决于您的部署。
host istio-pilot.istio-system.svc.cluster.local.
生成消息示例:
istio-pilot.istio-system.svc.cluster.local has address 10.63.247.248
同样检查istio-ingress:
host istio-ingress.istio-system.svc.cluster.local.
生成消息示例:
istio-ingress.istio-system.svc.cluster.local has address 10.63.243.30
- 通过检查虚拟机是否可以连接到Pilot和节点来验证连接。
curl 'http://istio-pilot.istio-system:8080/v1/registration/istio-pilot.istio-system.svc.cluster.local|http-discovery' { "hosts": [ { "ip_address": "10.60.1.4", "port": 8080 } ] } # On the VM, use the address above. It will directly connect to the pod running istio-pilot. curl 'http://10.60.1.4:8080/v1/registration/istio-pilot.istio-system.svc.cluster.local|http-discovery'
- 提取最初的Istio认证机密并将其复制到机器上。Istio的默认安装包括Istio CA,即使禁用自动“mTLS”设置(它为每个服务帐户创建机密,机密被命名为istio.<serviceaccount>),也会生成Istio机密。建议您执行此步骤,以便日后启用mTLS,并升级到将默认启用mTLS的未来版本。
# ACCOUNT defaults to 'default', or SERVICE_ACCOUNT environment variable # NAMESPACE defaults to current namespace, or SERVICE_NAMESPACE environment variable # (this step is done by machineSetup) # On a mac either brew install base64 or set BASE64_DECODE="/usr/bin/base64 -D" install/tools/setupMeshEx.sh machineCerts ACCOUNT NAMESPACE
生成的文件(key.pem,root-cert.pem,cert-chain.pem)必须被复制到每一台机器上的/etc/certs目录下,并通过istio代理读取。
- 安装Istio Debian文件并启动’istio’和’istio-auth-node-agent’服务。从github发行版获取debian软件包或:
# Note: This will be replaced with an 'apt-get' command once the repositories are setup. source istio.VERSION # defines version and URLs env var curl -L ${PILOT_DEBIAN_URL}/istio-agent.deb > ${ISTIO_STAGING}/istio-agent.deb curl -L ${AUTH_DEBIAN_URL}/istio-auth-node-agent.deb > ${ISTIO_STAGING}/istio-auth-node-agent.deb curl -L ${PROXY_DEBIAN_URL}/istio-proxy.deb > ${ISTIO_STAGING}/istio-proxy.deb dpkg -i istio-proxy-envoy.deb dpkg -i istio-agent.deb dpkg -i istio-auth-node-agent.deb systemctl start istio systemctl start istio-auth-node-agent
–手动设置步骤结束–
设置完成后,机器应能够访问在Kubernetes集群或其他网格扩展机器上运行的服务。
# Assuming you install bookinfo in 'bookinfo' namespace
curl productpage.bookinfo.svc.cluster.local:9080
... html content ...
检查进程是否正在运行:
ps aux |grep istio
root 6941 0.0 0.2 75392 16820 ? Ssl 21:32 0:00 /usr/local/istio/bin/node_agent --logtostderr
root 6955 0.0 0.0 49344 3048 ? Ss 21:32 0:00 su -s /bin/bash -c INSTANCE_IP=10.150.0.5 POD_NAME=demo-vm-1 POD_NAMESPACE=default exec /usr/local/bin/pilot-agent proxy > /var/log/istio/istio.log istio-proxy
istio-p+ 7016 0.0 0.1 215172 12096 ? Ssl 21:32 0:00 /usr/local/bin/pilot-agent proxy
istio-p+ 7094 4.0 0.3 69540 24800 ? Sl 21:32 0:37 /usr/local/bin/envoy -c /etc/istio/proxy/envoy-rev1.json --restart-epoch 1 --drain-time-s 2 --parent-shutdown-time-s 3 --service-cluster istio-proxy --service-node sidecar~10.150.0.5~demo-vm-1.default~default.svc.cluster.local
Istio身份验证节点代理是健康的:
sudo systemctl status istio-auth-node-agent
● istio-auth-node-agent.service - istio-auth-node-agent: The Istio auth node agent
Loaded: loaded (/lib/systemd/system/istio-auth-node-agent.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2017-10-13 21:32:29 UTC; 9s ago
Docs: https://istio.io/
Main PID: 6941 (node_agent)
Tasks: 5
Memory: 5.9M
CPU: 92ms
CGroup: /system.slice/istio-auth-node-agent.service
└─6941 /usr/local/istio/bin/node_agent --logtostderr
Oct 13 21:32:29 demo-vm-1 systemd[1]: Started istio-auth-node-agent: The Istio auth node agent.
Oct 13 21:32:29 demo-vm-1 node_agent[6941]: I1013 21:32:29.469314 6941 main.go:66] Starting Node Agent
Oct 13 21:32:29 demo-vm-1 node_agent[6941]: I1013 21:32:29.469365 6941 nodeagent.go:96] Node Agent starts successfully.
Oct 13 21:32:29 demo-vm-1 node_agent[6941]: I1013 21:32:29.483324 6941 nodeagent.go:112] Sending CSR (retrial #0) ...
Oct 13 21:32:29 demo-vm-1 node_agent[6941]: I1013 21:32:29.862575 6941 nodeagent.go:128] CSR is approved successfully. Will renew cert in 29m59.137732603s
在网格扩展机器上运行服务
- 配置sidecar来拦截端口。这是在/ var / lib / istio / envoy / sidecar.env中使用ISTIO_INBOUND_PORTS环境变量配置的。示例(在运行该服务的VM上):
echo "ISTIO_INBOUND_PORTS=27017,3306,8080" > /var/lib/istio/envoy/sidecar.env systemctl restart istio
- 手动配置无选择者服务和端点。“无选择者”服务用于不受Kubernetes pods支持的服务。例如,在具有修改Kubernetes服务权限的机器上:
# istioctl register servicename machine-ip portname:port istioctl -n onprem register mysql 1.2.3.4 3306 istioctl -n onprem register svc1 1.2.3.4 http:7000
安装完成后,Kubernetes软件包和其他网格扩展应该能够访问机器上运行的服务。
把它放在一起
请参阅BookInfo网格扩展指南。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/94286.html