Использование ConfigMap для определения списка блоков CIDR из белого списка
Что я хочу сделать
Я хотел бы применить белый список IP-адресов, определенный в ConfigMap. Я хотел бы сохранить список внешним, потому что его проще хранить в одном файле, чем вставлять блоки в строку. Белый список будет использоваться многими службами в разных пространствах имен.
Что я имею
Многое было удалено из следующих файлов спецификаций, но, надеюсь, достаточно было сохранено.
Я определяю белый список в 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
Селектор, кажется, принимает только один блок...?
1 ответ
Использование входных аннотаций
ConfigMaps не поддерживаются в аннотациях.
Использование 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