只能从私人网络Kubernetes访问服务

时间:2018-02-13 09:52:28

标签: docker nginx kubernetes

我收到了我的kubernetes服务的公共IP地址,我可以在我的NGINX入口中配置为负载均衡器ip。可以从公共互联网访问此公共IP地址。

是否有方法或某些配置可以通过我的客户网络在kubernetes中访问这些服务?

3 个答案:

答案 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'

https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/annotations.md#whitelist-source-range

答案 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>