6.5. 在每个网格中部署应用程序工作负载
要部署应用程序工作负载,请将每个工作负载分配给单独的命名空间。
步骤
运行以下命令,创建一个名为
app-ns-1的应用程序命名空间:$ oc create namespace app-ns-1要确保命名空间由第一个 control plane 发现,请运行以下命令添加
istio-discovery=mesh-1标签:$ oc label namespace app-ns-1 istio-discovery=mesh-1要在默认启用 sidecar 注入所有 pod,同时确保此命名空间中的 pod 映射到第一个 control plane,请运行以下命令将
istio.io/rev=mesh-1标签添加到命名空间中:$ oc label namespace app-ns-1 istio.io/rev=mesh-1可选:您可以运行以下命令来验证
mesh-1修订名称:$ oc get istiorevisions运行以下命令部署
sleep和httpbin应用程序:$ oc apply -n app-ns-1 \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/sleep/sleep.yaml \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/httpbin/httpbin.yaml运行以下命令,等待
httpbin和sleeppod 使用注入的 sidecar 运行:$ oc get pods -n app-ns-1输出示例
NAME READY STATUS RESTARTS AGE httpbin-7f56dc944b-kpw2x 2/2 Running 0 2m26s sleep-5577c64d7c-b5wd2 2/2 Running 0 91m运行以下命令,创建名为
app-ns-2的第二个应用程序命名空间:$ oc create namespace app-ns-2运行以下命令,创建名为
app-ns-3的第三个应用程序命名空间:$ oc create namespace app-ns-3运行以下命令,将标签
istio-discovery=mesh-2添加到命名空间和修订标签mesh-2中,以匹配第二个 control plane 的发现选择器:$ oc label namespace app-ns-2 app-ns-3 istio-discovery=mesh-2 istio.io/rev=mesh-2运行以下命令,将
sleep和httpbin应用程序部署到app-ns-2命名空间:$ oc apply -n app-ns-2 \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/sleep/sleep.yaml \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/httpbin/httpbin.yaml运行以下命令,将
sleep和httpbin应用程序部署到app-ns-3命名空间:$ oc apply -n app-ns-3 \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/sleep/sleep.yaml \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/httpbin/httpbin.yaml可选:使用以下命令等待部署可用:
$ oc wait deployments -n app-ns-2 --all --for condition=Available
验证
在部署应用程序后,使用
istioctl ps命令验证每个应用程序工作负载是否由分配的 control plane 管理:运行以下命令,验证工作负载是否已分配给
istio-system-1中的 control plane:$ istioctl ps -i istio-system-1输出示例
NAME CLUSTER CDS LDS EDS RDS ECDS ISTIOD VERSION httpbin-7f56dc944b-vwfm5.app-ns-1 Kubernetes SYNCED (11m) SYNCED (11m) SYNCED (11m) SYNCED (11m) IGNORED istiod-mesh-1-b69646b6f-kxrwk 1.23.0 sleep-5577c64d7c-d675f.app-ns-1 Kubernetes SYNCED (11m) SYNCED (11m) SYNCED (11m) SYNCED (11m) IGNORED istiod-mesh-1-b69646b6f-kxrwk 1.23.0运行以下命令,验证工作负载是否已分配给
istio-system-2中的 control plane:$ istioctl ps -i istio-system-2输出示例
NAME CLUSTER CDS LDS EDS RDS ECDS ISTIOD VERSION httpbin-7f56dc944b-54gjs.app-ns-3 Kubernetes SYNCED (3m59s) SYNCED (3m59s) SYNCED (3m59s) SYNCED (3m59s) IGNORED istiod-mesh-2-8666fdfc6-mqp45 1.23.0 httpbin-7f56dc944b-gnh72.app-ns-2 Kubernetes SYNCED (4m1s) SYNCED (4m1s) SYNCED (3m59s) SYNCED (4m1s) IGNORED istiod-mesh-2-8666fdfc6-mqp45 1.23.0 sleep-5577c64d7c-k9mxz.app-ns-2 Kubernetes SYNCED (4m1s) SYNCED (4m1s) SYNCED (3m59s) SYNCED (4m1s) IGNORED istiod-mesh-2-8666fdfc6-mqp45 1.23.0 sleep-5577c64d7c-m9hvm.app-ns-3 Kubernetes SYNCED (4m1s) SYNCED (4m1s) SYNCED (3m59s) SYNCED (4m1s) IGNORED istiod-mesh-2-8666fdfc6-mqp45 1.23.0
验证应用程序连接是否仅限于其对应网格中的工作负载:
运行以下命令,将来自
app-ns-1中的sleeppod 的请求发送到app-ns-2中的httpbin服务,以检查通信是否失败:$ oc -n app-ns-1 exec deploy/sleep -c sleep -- curl -sIL http://httpbin.app-ns-2.svc.cluster.local:8000之前创建的
PeerAuthentication资源在每个网格中以STRICT模式实施 mutual TLS (mTLS)流量。每个网格使用自己的 root 证书,由istio-ca-root-cert配置映射管理,这可防止网格之间的通信。输出显示通信失败,如下例所示:输出示例
HTTP/1.1 503 Service Unavailable content-length: 95 content-type: text/plain date: Wed, 16 Oct 2024 12:05:37 GMT server: envoy确认通信的工作原理是:从
sleeppod 发送请求到app-ns-2命名空间中的httpbin服务,该服务由mesh-2管理。运行以下命令:$ oc -n app-ns-2 exec deploy/sleep -c sleep -- curl -sIL http://httpbin.app-ns-3.svc.cluster.local:8000输出示例
HTTP/1.1 200 OK access-control-allow-credentials: true access-control-allow-origin: * content-security-policy: default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' camo.githubusercontent.com content-type: text/html; charset=utf-8 date: Wed, 16 Oct 2024 12:06:30 GMT x-envoy-upstream-service-time: 8 server: envoy transfer-encoding: chunked