说在前面:本文主要测试 service entry 是否可以跨命名空间可见。istio 版本为 1.8.1 k8s 版本为 1.17 网络插件为 calico。

部署示例

详情:创建命名空间 entry1、entry2 部署一个 sleep 服务然后注入 sidecar,创建命名空间 entry3 部署一个 httpbin 服务不注入 sidecar 。然后通过 service entry 的方式将 httpbin 注册到 istio 中。

部署详情:

[root@dev-10 mesh_test]# kubectl get pod -n entry1
NAME                    READY   STATUS    RESTARTS   AGE
sleep-bb5f59fb6-d29mr   2/2     Running   0          29m
[root@dev-10 mesh_test]# kubectl get pod -n entry2
NAME                     READY   STATUS    RESTARTS   AGE
sleep-78458b8cfc-pdsp5   2/2     Running   0          30m
[root@dev-10 mesh_test]# kubectl get pod -n entry3
NAME                       READY   STATUS    RESTARTS   AGE
httpbin-7589dbf6bf-l845z   1/1     Running   0          34m

测试,这时无论通过 entry1 或 entry2 中的 sleep 访问 entry3 中的 httpbin 都不会通过。注意:istio 默认可以访问所有外部服务,需要在部署时将这个特性修改为只允许访问注册服务 ,否则只要网络可达那就可以随意访问

    # REGISTRY_ONLY or ALLOW_ANYoutboundTrafficPolicy:mode: REGISTRY_ONLY

无论从 entry1 还是 entry2 访问都是失败的。

[root@dev-10 mesh_test]# kubectl exec -it sleep-78458b8cfc-pdsp5 -n entry2 -c sleep -- curl 10.20.21.19:30263/ip
curl: (56) Recv failure: Connection reset by peer
command terminated with exit code 56
[root@dev-10 mesh_test]# kubectl exec -it sleep-bb5f59fb6-d29mr -n entry1 -c sleep -- curl 10.20.21.19:30263/ip
curl: (56) Recv failure: Connection reset by peer
command terminated with exit code 56

创建 ServiceEntry

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:name: access-httpbinnamespace: entry1
spec:endpoints:- address: 10.20.21.19ports:http: 30263exportTo:- .hosts:- 10.20.21.19ports:- name: httpnumber: 30263protocol: httpresolution: DNS

在 entry1 命名空间创建 service entry,再次测试,这时从 entry1 命名空间访问是可以通过的。而 entry1 中的 service entry 对 entry2 是不可见的。所以 entry2 访问 httpbin 失败。

[root@dev-10 mesh_test]# kubectl exec -it sleep-bb5f59fb6-d29mr -n entry1 -c sleep -- curl 10.20.21.19:30263/ip
{"origin": "10.20.21.19"
}
[root@dev-10 mesh_test]# kubectl exec -it sleep-78458b8cfc-pdsp5 -n entry2 -c sleep -- curl 10.20.21.19:30263/ip
curl: (56) Recv failure: Connection reset by peer
command terminated with exit code 56

entry2 命名空间创建 service entry 再次测试。entry2 的 yaml 内容基本与 entry1 内容基本相同,更新 ns 即可。

[root@dev-10 mesh_test]# kubectl exec -it sleep-78458b8cfc-pdsp5 -n entry2 -c sleep -- curl 10.20.21.19:30263/ip
{"origin": "10.20.21.19"
}

ok,这下 entry2 命名空间中的 sleep 服务也可以访问 httpbin。

但是此时,不管 entry1 还是 entry2 命名空间都是单独的 service entry。也就是说此时我有两个 service entry 彼此独立。现在删除两个 service entry 创建一个全局的对全部命名空间可见的 service entry。

创建 global service entry

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:name: access-httpbin-globalnamespace: istio-system
spec:endpoints:- address: 10.20.21.19ports:http: 30263exportTo:- '*'hosts:- 10.20.21.19ports:- name: httpnumber: 30263protocol: httpresolution: DNS

直接在 istio-system 创建 service entry。这时 istio 中只有一个 service entry 就是刚刚创建的。

测试访问

[root@dev-10 mesh_test]# kubectl exec -it sleep-bb5f59fb6-d29mr -n entry1 -c sleep -- curl 10.20.21.19:30263/ip
{"origin": "10.20.21.19"
}
[root@dev-10 mesh_test]# kubectl exec -it sleep-78458b8cfc-pdsp5 -n entry2 -c sleep -- curl 10.20.21.19:30263/ip
{"origin": "10.20.21.19"
}

这时,虽然只有一个 service entry 但是不论 entry1 还是 entry2 访问都可以通过。

注意 service entry 中的 exportTo 字段,查看官网看一下原文解释

A list of namespaces to which this service is exported. Exporting a service allows it to be used by sidecars, gateways and virtual services defined in other namespaces. This feature provides a mechanism for service owners and mesh administrators to control the visibility of services across namespace boundaries.If no namespaces are specified then the service is exported to all namespaces by default.The value “.” is reserved and defines an export to the same namespace that the service is declared in. Similarly the value “*” is reserved and defines an export to all namespaces.NOTE: in the current release, the exportTo value is restricted to “.” or “*” (i.e., the current namespace or all namespaces).

内容大意如下:
当前服务暴露的命名空间列表,暴露出的服务允许其他命名空间中定义的 sidecar、gateway、virtual services 使用。这个服务提供了一种机制:控制跨命名空间边界的服务的可见性。

如果没有指定命名空间,则默认情况下将该服务暴露到所有命名空间。

“.” 定义了暴露在当前命名空间的服务。类似地,“*” 定义了暴露在所有命名空间的服务。

注意:在当前版本 exportTo 的值为 “.” 或者 “*”

结尾:ServiceEntry 可以通过 exportTo 来控制是否跨命名空间可见。即:当前命名空间、指定命名空间、所有命名空间。

ServiceEntry 跨命名空间相关推荐

  1. 【转】C# 命名空间 Namespace (学习心得 23)

    命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式. 超级小白友好,讲解C#基础,每集5分钟轻松学习,拒绝从入门到放弃! 文章目录 一.定义命名空间 二.using 关键字 三.嵌套命名空间 ...

  2. Kubernetes 分层命名空间

    命名空间是构建租户模式的重要部分,但在某些情况下,命名空间的使用并不太灵活,本文就介绍了分层命名空间,其实现了策略继承.创建继承,希望可以帮助大家更好地使用命名空间.在单个 Kubernetes集群上 ...

  3. VB.NET之旅--命名空间

    声明命名空间 Visual Basic.NET提供了命名空间.命名空间组织的在部件中定义的对象. 利用命名空间,可以按层次组织对象.层次结构把相似的对象组合起来,简化了访问. 使用命名空间来合理地组织 ...

  4. 何为C++的命名空间

    一.命名空间的引入 (1)命名空间namespace,是C++引入的解决全局变量和函数名冲突的机制. (2)C语言没有命名空间,但是java和python等都有 (3)namespace的关键点有两个 ...

  5. 【C++】命名空间namespace详解

    一.命名空间的引入 C++中,名称(name)可以是符号常量.变量.宏.函数.结构体.枚举.类和对象等等.而在大型工程中,难免会有重名的现象,命名空间namespace,就是C++引入的一种解决名称冲 ...

  6. VirtualService

    VirtualService 影响流量路由的配置.以下是一些术语,可在流量路由的上下文中进行定义. Service 通常是绑定到服务注册表中唯一名称的应用程序行为的单元.服务包含多个网络 Endpoi ...

  7. istio功能介绍(二.Istio使用说明)

    文章目录 流量治理 使用istio的注意事项 istio的流量治理流程 VirtualService路由规则配置 HttpRoute HTTPRoute的匹配规则 1.HttpRoute的路由目标 2 ...

  8. Ingress 继任者 Gateway API 使用

    Gateway API(之前叫 Service API)是由 SIG-NETWORK 社区管理的开源项目,项目地址:https://gateway-api.sigs.k8s.io/.主要原因是 Ing ...

  9. k8s 带你一步步 创建用户账号(User Account)

    RBAC官方文档: https://kubernetes.io/docs/reference/access-authn-authz/rbac/ [k8s] 第九章 安全认证 https://andyo ...

最新文章

  1. 我爱自然语言处理bert ner chinese
  2. 太牛了!22岁本科生Github上开源的后台管理系统,太实用(附源码)!
  3. 深度学习框架大战,我该选哪个?
  4. leetcode算法题--仅仅反转字母
  5. 【分享】WeX5的正确打开方式(1)
  6. MySQL查询之聚合查询
  7. java 设置文本颜色_在Java中更改文本的颜色
  8. boot lvm 分区_LVM磁盘逻辑卷管理
  9. 【路径规划】基于matlab蚁群和粒子群算法双机器人协调路径规划【含Matlab源码 045期】
  10. python利用reportlab打印图文并茂内容
  11. 【低代码平台浅析】钉钉宜搭
  12. GIS空间分析 栅格数据分析3 可达性分析
  13. 宝塔linux面板什么用,宝塔面板干什么用的呢?
  14. (1.4.10.1)SXF测试笔试题
  15. java更新word目录_java aspose.words 生成word目录和更新目录
  16. 我是这样手写 Spring 的(麻雀虽小五脏俱全)
  17. python中如何把xlsx、xls文件转换为txt文件?安排
  18. windows下安装禅道
  19. python怎么判断字符串中包含特殊符号
  20. 往哪里看低买高卖和利润之间

热门文章

  1. 山东省教师职称评定取消计算机,好消息!山东省发布教师职称新规,建立专属职称制度,单独评聘...
  2. 【大数据AI人工智能】数字孪生:为城市和你创造一个虚拟副本
  3. ireport中文手册3.7版(无图)
  4. CC2541增加特征值 CHAR6实现串口透传
  5. 地下城与勇士(DNF)海上列车副本(列车上的海贼、夺回西部线、幽灵列车、 雾都赫伊斯、阿登高地、特快列车追击战、卡勒特指挥部)(童年的回忆)
  6. python 编译pyc以及pyc包导入使用
  7. 余弦相似度-字符串相似度计算(scala)
  8. altium designer导出bom表和贴片图
  9. C++中智能指针详解
  10. Java 实现多线程的四种方式