在我的Kubernetes集群上,我想隔离对内部和外部应用程序的访问。在下面的示例中,我将app1和app2都暴露在Internet上,但是只希望app1和app2暴露在Internet上,而app2仅适用于内部vnet中的用户。
我最初的想法是仅提供一个新服务(蓝框)并使用“ internal = true”属性,然后我的云提供商创建内部IP,我很好。问题是指向部署(网关)的网关,因此似乎要创建内部入口,我需要复制所有3个蓝色框。
是否有简单的方法就可以在没有新部署的情况下绑定新服务和网关(蓝框),或者通过策略限制外部访问?
答案 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进行测试。
让我知道它是否回答了您的问题,或者您还有其他问题。