《Istio官方文档》Kubernetes-Istio网格扩展

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

(0)
上一篇 2021年8月16日
下一篇 2021年8月16日

相关推荐

发表回复

登录后才能评论