我收到了kubernetes服务的公共ip地址,我可以将其配置为NGINX入口中的负载均衡器ip。可以从公共互联网访问此公共ip地址。
有没有一种方法或配置可以使这些服务只能从kubernetes中的客户端网络访问?
发布于 2018-02-13 20:20:44
使用Kubernetes Nginx Ingress,它就像在入口对象上设置注释一样简单,如下所示:
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/whitelist-source-range: '8.8.8.8/32'发布于 2018-02-13 20:08:07
您可以按照建议使用VPN并创建一个内部LoadBalancer,或者您可以查看我认为是Kubernetes标准方式的Network Policies来实现您的解决方案。
默认情况下,如果命名空间中不存在策略,则允许所有进出该命名空间中的pods的进出流量。下面的示例允许您更改该命名空间中的默认行为。
您将需要创建一个NetworkPolicy资源,在规范中,您将必须描述利用可用字段的行为,我建议您检查official documentation以检索有关结构的更多信息。
PolicyTypes:
指定的
请记住,为了实现它们,你需要使用支持NetworkPolicy,的网络解决方案,如果你只是创建资源,而没有控制器来实现它,它将不会有任何效果。
策略示例:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978发布于 2018-02-14 05:42:59
使用网络策略很好。但是,更简单的方法是使用将nginx入口控制器的ExternalIP设置为客户端网络中的IP地址。这将仅在客户端网络上公开服务。
以下是helm的示例配置
helm install --name my-ingress stable/nginx-ingress \
--set controller.service.externalIPs=<IP address in client network>https://stackoverflow.com/questions/48763859
复制相似问题