在 OSM 宽松流量策略模式下,本指南演示了客户端和服务端应用在服务网格中进行通信。这允许应用互通建立而无需显式的配置 SMI 流量访问策略
先决条件
- Kubernetes 集群运行版本 v1.22.9 或者更高。
- 已安装 OSM。
- 使用
kubectl
与 API server 交互。 - 已安装
osm
命令行工具,用于管理服务网格。
演示
以下演示了一个 HTTP curl
客户端,在宽松流量策略模式下,向 httpbin
service 发送 HTTP 请求。
开启宽松流量模式
export osm_namespace=osm-system # Replace osm-system with the namespace where OSM is installed
kubectl patch meshconfig osm-mesh-config -n "$osm_namespace" -p '{"spec":{"traffic":{"enablePermissiveTrafficPolicyMode":true}}}' --type=merge
在
httpbin
命名空间下部署httpbin
service ,并纳入网格管理。httpbin
service 运行在14001
端口。# Create the httpbin namespace
kubectl create namespace httpbin
# Add the namespace to the mesh
osm namespace add httpbin
# Deploy httpbin service in the httpbin namespace
kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm-docs/release-v1.2/manifests/samples/httpbin/httpbin.yaml -n httpbin
确认
httpbin
service 和 pod 启动并运行。$ kubectl get svc -n httpbin
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
httpbin ClusterIP 10.96.198.23 <none> 14001/TCP 20s
$ kubectl get pods -n httpbin
NAME READY STATUS RESTARTS AGE
httpbin-5b8b94b9-lt2vs 2/2 Running 0 20s
在
curl
命名空间下部署curl
客户端,并将该命名空间纳入网格中。# Create the curl namespace
kubectl create namespace curl
# Add the namespace to the mesh
osm namespace add curl
# Deploy curl client in the curl namespace
kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm-docs/release-v1.2/manifests/samples/curl/curl.yaml -n curl
确认
curl
客户端 pod 启动并运行。$ kubectl get pods -n curl
NAME READY STATUS RESTARTS AGE
curl-54ccc6954c-9rlvp 2/2 Running 0 20s
确认
curl
客户端可以访问httpbin
的14001
端口。$ kubectl exec -n curl -ti "$(kubectl get pod -n curl -l app=curl -o jsonpath='{.items[0].metadata.name}')" -c curl -- curl -I http://httpbin.httpbin:14001
HTTP/1.1 200 OK
server: envoy
date: Mon, 15 Mar 2021 22:45:23 GMT
content-type: text/html; charset=utf-8
content-length: 9593
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 2
200 OK
响应表示curl
客户端访问httpbin
service 成功。确认在禁用宽松流量模式后 HTTP 请求失败。
kubectl patch meshconfig osm-mesh-config -n "$osm_namespace" -p '{"spec":{"traffic":{"enablePermissiveTrafficPolicyMode":false}}}' --type=merge
$ kubectl exec -n curl -ti "$(kubectl get pod -n curl -l app=curl -o jsonpath='{.items[0].metadata.name}')" -c curl -- curl -I http://httpbin.httpbin:14001
curl: (7) Failed to connect to httpbin.httpbin port 14001: Connection refused
command terminated with exit code 7