使用 ConfigMap 指定列入白名单的 CIDR 块列表
Using a ConfigMap to specify list of whitelisted CIDR blocks
我想做什么
我想应用在 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,然后我意识到出于业务原因我无法更改服务类型。
使用 Ingress 注释
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
选择器似乎只接受一个块...?
Using Ingress Annotations
注释不支持 ConfigMap。
Using a NetworkPolicy
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
我想做什么
我想应用在 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,然后我意识到出于业务原因我无法更改服务类型。
使用 Ingress 注释
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
选择器似乎只接受一个块...?
Using Ingress Annotations
注释不支持 ConfigMap。
Using a NetworkPolicy
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