【问题标题】:How do I segregate internal and external loads using Istio Ingress?如何使用 Istio Ingress 隔离内部和外部负载?
【发布时间】:2020-02-15 15:13:05
【问题描述】:

在我的 Kubernetes 集群上,我想隔离对内部和外部应用程序的访问。在下面的示例中,我将 app1 和 app2 都暴露在互联网上,但希望只有 app1 暴露在互联网上,而 app2 仅对内部 vnet 中的用户可用。

我最初的想法是创建一个新服务(蓝色框)并使用“internal=true”属性,我的云提供商创建内部 IP,我很好。问题是网关指向部署(pod),所以它似乎创建了一个内部入口,我需要复制所有 3 个蓝色框。

是否有一种简单的方法可以在不进行新部署(蓝色框)的情况下绑定新服务和网关,或者通过策略限制外部访问?

【问题讨论】:

  • 你能告诉我我是否正确,你希望能够从外部和内部向 app1 发出请求,但你想阻止从外部到 app2 的每个请求,它只接受内部的请求网格?

标签: kubernetes kubernetes-ingress istio


【解决方案1】:

据我所知,您可以创建 virtual service 来做到这一点

保留字mesh用于暗示mesh中的所有sidecar。当省略此字段时,将使用默认网关(网格),这会将规则应用于网格中的所有边车。如果提供了网关名称列表,则规则将仅适用于网关。要将规则同时应用于网关和边车,请将网格指定为网关名称之一。

您可以在stackoverflow 上查看我的另一个答案,完全再现了某人的问题,我使用网关创建虚拟服务以从外部访问(在示例中只是卷曲),如果您只想制作它在网格内只需删除此网关并仅保留网格一个,如下例所示。

特别是虚拟服务

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: nginxvirt
spec:
  gateways:
  - mesh #inside cluster
  hosts:
  - nginx.default.svc.cluster.local #inside cluster
  http:
  - name: match-myuid
    match:
    - uri:
        prefix: /
    rewrite:
      uri: /
    route:
    - destination:
        host: nginx.default.svc.cluster.local
        port:
          number: 80

以及一些外部和内部测试

外部

  • 带有额外的网关以允许外部流量

    curl -v -H "host: nginx.com" loadbalancer_istio_ingress_gateway_ip/

    HTTP/1.1 200 正常

  • 没有额外的网关来允许外部流量,只有网状网络

    curl -v -H "host: nginx.com" loadbalancer_istio_ingress_gateway_ip/

    HTTP/1.1 404 未找到

内部

Created some basic ubuntu pod for tests

kubectl exec -ti ubu1 -- /bin/bash
  • 带网状网关

    curl -v nginx/

    HTTP/1.1 200 正常

  • 没有网状网关

    curl -v nginx/

    HTTP/1.1 404 未找到

基于此,您可以使用网关“mesh”,它只能在网格内部工作,并且不允许外部请求。

如果你想测试的话,我可以给你带来一包 yaml 来测试。

如果这回答了您的问题或者您还有其他问题,请告诉我。

【讨论】:

猜你喜欢
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2021-03-05
  • 1970-01-01
相关资源
最近更新 更多