我收到了我的kubernetes服务的公共IP地址,我可以在我的NGINX入口中配置为负载均衡器ip。可以从公共互联网访问此公共IP地址。
是否有方法或某些配置可以通过我的客户网络在kubernetes中访问这些服务?
答案 0 :(得分:4)
使用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'
答案 1 :(得分:2)
您可以按照建议使用VPN并创建内部LoadBalancer,或者您可以检查我认为是Kubernetes实施解决方案的标准方式的Network Policies。
默认情况下,如果命名空间中不存在任何策略,则允许所有入口和出口流量进出该命名空间中的pod。以下示例允许您更改该命名空间中的默认行为。
您需要创建一个NetworkPolicy资源,在规范中您必须描述使用可用字段的行为,我建议您检查official documentation以获取有关结构的更多信息。
PolicyTypes:
...
ingress :每个NetworkPolicy都可能包含白名单入口规则列表。每个规则允许匹配from和ports部分的流量。示例策略包含一个规则,它匹配单个端口上的流量,来自三个源中的一个,第一个通过ipBlock指定,第二个通过namespaceSelector,第三个通过podSelector。
...
请记住,为了实现它们,您需要使用 支持 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
答案 2 :(得分:0)
使用网络策略很不错。但是,更简单的方法是使用nginx入口控制器的set ExternalIP
到客户端网络中的IP地址。这仅在客户端网络上公开服务。
以下是helm的示例配置:
helm install --name my-ingress stable/nginx-ingress \
--set controller.service.externalIPs=<IP address in client network>