我想应用在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
请注意,服务类型是默认类型,因为我依靠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
选择器似乎只接受一个块...?
答案 0 :(得分:2)
注释不支持使用入口注释
ConfigMap。
使用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