如何使用Istio Ingress隔离内部和外部负载?

时间:2020-02-15 15:13:05

标签: kubernetes kubernetes-ingress istio

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

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

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

enter image description here

1 个答案:

答案 0 :(得分:0)

根据我的知识,您可以创建virtual service来完成

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

您可以在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“主机:nginx.com” loadbalancer_istio_ingress_gateway_ip /

    HTTP / 1.1 200确定

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

    curl -v -H“主机: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

基于此,您可以使用网关“网格”,该网关仅在网格内部有效,并且不允许外部请求。

如果您要测试,我可以带给您一包Yamls进行测试。

让我知道它是否回答了您的问题,或者您还有其他问题。