istio ServiceEntry使用例子

本文介绍了Istio中的ServiceEntry和VirtualService如何协同工作来管理Kubernetes内部及外部服务的路由。ServiceEntry用于定义网格外部服务的入口,而VirtualService则定义了基于HTTP的路由规则,将请求导向特定的服务。通过示例展示了如何配置这两个资源,包括匹配URI、重定向、超时设置以及WorkloadEntry的使用,以连接到外部服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明

ServiceEntry和kubernetes service的功能是一样的,不同的地方是ServiceEntry指向外部地址或者其他kubernetes service或者endpoint

话不多说,现在结合VirtualService给出个Demo
VirtualService yaml文件

kind: VirtualService
metadata:
  name: ssdemo
  namespace: demo
spec:
  gateways:
  - kubeflow/kubeflow-gateway # 网关
  hosts:
  - '*'
  http:
  - match:
    - uri:
        prefix: /tensorboard/qinzhao/ssdemo/
    rewrite:
      uri: /
    route:
    - destination:
        host: mymongodb.somedomain ## ServiceEntry指定的域名
        port:
          number: 6006 # 外部端口
    timeout: 300s

ServiceEntry yaml

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-svc-mongocluster
  namespace: qinzhao
spec:
  hosts:
  - mymongodb.somedomain # 服务网格内地址
  ports:
  - number: 6006 # 外部协议端口
    name: http 
    protocol: http  # 外部协议名称
  location: MESH_EXTERNAL # 表明是服务网格之外的
  resolution: STATIC
  endpoints:
  - address: 192.168.1.10 # 外部服务地址

需要注意的是 VirtualService和ServiceEntry中的 mymongodb.somedomain 需要保持一致


WorkloadEntry使用例子

WorkloadEntry就是可以通过ServiceEntry选择的实例,对应kubernetes节点上的Pod实例

kind: WorkloadEntry
metadata:
  name: details-vm-2
  namespace: qinzhao
spec:
  address: 192.168.1.10 # 外部地址
  ports:
    number: 6006
  labels:
    app: details-legacy
    instance-id: vm1

ServiceEntry

kind: ServiceEntry
metadata:
  name: details-svc
  namespace: qinzhao
spec:
  hosts:
  - details.bookinfo.com
  location: MESH_INTERNAL
  ports:
  - number: 80
    name: http
    protocol: HTTP
    targetPort: 6006
  resolution: DNS
  workloadSelector:
    labels:
      app: details-legacy

VirtualService

kind: VirtualService
metadata:
  name: ssdemo
  namespace: qinzhao
spec:
  gateways:
  - kubeflow/kubeflow-gateway
  hosts:
  - '*'
  http:
  - match:
    - uri:
        prefix: /tensorboard/qinzhao/ssdemo/
    rewrite:
      uri: /
    route:
    - destination:
        host: details.bookinfo.com # 对应上 ServiceEntry hosts的字段
        port:
          number: 80
    timeout: 300s
### Istio 部署与使用指南 #### 一、Istio简介 Istio 是一种开源的服务网格实现,旨在连接、管理和保护微服务。它提供了一种统一的方式来管理跨多个不同部署环境(云平台、本地数据中心等)运行的服务之间的流量和服务间通信。 #### 二、安装前准备 在开始之前,请确认已经具备Kubernetes集群访问权限,并且已配置好`kubectl`命令行工具以便能够操作该集群[^1]。 #### 三、安装Istio控制平面组件 可以通过官方提供的Helm图表或者直接下载istioctl CLI来完成这一过程。对于大多数场景来说推荐采用后者的方式来进行安装,因为它更易于维护和升级。 ```bash curl -L https://istio.io/downloadIstio | sh - cd istio-* export PATH=$PWD/bin:$PATH ``` 执行上述脚本将会自动获取最新版本并将其解压到当前目录下;随后设置环境变量使得可以在任何地方调用`istioctl`命令[^3]。 #### 四、初始化Istio资源对象 利用刚刚获得的CLI工具创建必要的命名空间以及自定义资源定义(CRDs),这一步骤非常重要因为后续所有的配置都将基于这些基础结构之上构建而成。 ```bash istioctl install --set profile=demo -y ``` 此命令会按照演示模式快速搭建起一套完整的Istio实例供测试用途。 #### 五、验证安装状态 一旦成功完成了前面几步的操作之后就可以通过下面这条指令查看整个系统的健康状况了: ```bash istioctl verify-installation ``` 如果一切正常的话应该可以看到类似于“Installation verified successfully”的提示信息显示出来。 #### 六、集成现有应用程序至Service Mesh当中 为了让某个特定的应用程序加入到由Istio所构成的服务网格内部去,则需要对其进行相应的改造工作——即引入sidecar代理容器负责处理进出的数据流。通常情况下只需要简单地向Deployment资源配置文件里添加几行额外的内容即可达成目的。 #### 七、探索更多高级特性 当熟悉基本概念和技术栈以后不妨尝试深入研究一下诸如安全策略设定、可观测性增强等方面的知识点吧!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值