0

我想做的事

我想应用在 ConfigMap 中定义的 IP 白名单。我想将列表保留在外部,因为将它放在一个文件中比将块内联更容易。白名单将被不同命名空间中的许多服务使用。

我有的

从以下规范文件中删除了很多内容,但希望已经保留了足够多的内容。

我将 ConfigMap 中的白名单定义为:

apiVersion: v1
kind: ConfigMap
data:
  whitelist:
    # example
    - 127.0.0.1/32
    # etc.
metadata:
  name: whitelist

对于此示例,我的服务是:

apiVersion: v1
kind: Service
metadata:
  name: example
  labels:
    label: example

请注意,Service 类型是默认类型,因为我依赖 Ingress 来公开它。这不能改变。

该服务位于 Ingress 定义的后面:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example
  rules:
  - host: example.com
#... ports, etc

我试过的

更改服务类型

将服务定义为type: LoadBalancer. 这正是我想要的,因为它很容易使用 ConfigMap,然后我意识到出于业务原因我无法更改服务类型。

使用入口注解

apiVersion: extensions/v1beta1
kind: Ingress
# ...
metadata:
  name: whitelist
  annotations:
    nginx.ingress.kubernetes.io/whitelist-source-range: "blockA", "blockB"

这有点工作,但我不知道如何使用 ConfigMap 而不是逗号分隔的列表。我应该在这里指出,任何让我使用外部定义列表的解决方案都是可以接受的,并且它不必是 ConfigMap 只是因为。

用一个NetworkPolicy

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: example-network-policy
spec:
  policyTypes:
  - Ingress
  ingress:
  - from:
    - ipBlock:
      cidr: # hmm... can I add the ConfigMap here?
    - namespaceSelector:
      # ...etc

到目前为止,这看起来最有希望,但ipBlock选择器似乎只接受一个块......?

4

1 回答 1

3

使用入口注解

注解中不支持 ConfigMap。

使用网络策略

ingress并且egress是数组结构,所以你可以试试这个,不确定它是否适合你:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: example-network-policy
spec:
  policyTypes:
  - Ingress
  ingress:
  - from:
    - ipBlock:
      cidr: <cidr1>
    - namespaceSelector:
      # ...etc
  - from:
    - ipBlock:
      cidr: <cidr2>
    - namespaceSelector:
      # ...etc
  - from:
    - ipBlock:
      cidr: <cidr3>
    - namespaceSelector:
      # ...etc
于 2018-09-25T18:08:23.257 回答