#kubernetes
#kubernetes
Вопрос:
У меня есть следующий сервис:
apiVersion: v1
kind: Service
metadata:
name: foo
labels:
app: foo
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: foo
selector:
app: foo
Эта служба указывает на следующее развертывание:
apiVersion: apps/v1
kind: Deployment
metadata:
name: foo
labels:
app: foo
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: foo
template:
metadata:
labels:
app: foo
spec:
containers:
- name: foo
image: gcr.io/foo:1.0.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
У меня также есть другое развертывание:
apiVersion: apps/v1
kind: Deployment
metadata:
name: bar
labels:
app: bar
spec:
selector:
matchLabels:
app: bar
template:
metadata:
labels:
app: bar
spec:
containers:
- name: bar
image: gcr.io/bar:1.0.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
foo
развертывается в пространстве имен Kubernetes под названием kube-protected
, bar
развертывается в пространстве имен Kubernetes по умолчанию.
foo
содержит данные импорта и должен быть хорошо защищен.
Пространство имен Kubernetes по умолчанию также может содержать другие развертывания: qux
, baz
и т.д.
Я хочу ограничить доступ к сервису, foo
чтобы только bar
к нему можно было получить доступ. Или другой способ — ограничить доступ к kube-protected
пространству имен, чтобы только bar
могли попасть в него.
РЕШЕНИЕ
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: namespace-which-you-want-to-protect-network-policy
namespace: namespace-which-you-want-to-protect
spec:
ingress:
- from:
- namespaceSelector:
matchLabels:
name: namespace-which-is-only-allowed-to-access-protected-namespace
podSelector:
matchLabels:
app: application-which-is-only-allowed-to-access-protected-namespace
podSelector: {}
Комментарии:
1. Когда вы ссылаетесь на ресурс из другого пространства имен, вам нужно будет указать пространство имен, иначе ресурс не будет виден. Так что не уверен, поможет ли это, но также взгляните на эту ссылку .
2. @cookiedough Спасибо за ответ. Я думаю, что RBAC больше предназначен для контроля доступа в команде, но мой вопрос касается взаимодействия модулей. Проверьте мое решение в нижней части моего вопроса.
3. @yivo Привет, я попробовал ваше решение, но у меня оно не сработало. нужно ли нам создавать какой-либо дополнительный файл helm, чтобы ограничить входной доступ к пространствам имен
Ответ №1:
в этой ситуации вы можете использовать сетевую политику для ограничения доступа к foo
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: access-nginx
spec:
podSelector:
matchLabels:
app: foo
ingress:
- from:
- podSelector:
matchLabels:
app: bar
Комментарии:
1. Не знал, что эта функция существует! Большое вам спасибо! Я поиграю с этим и отвечу.
2. Большое вам спасибо. Я опубликовал решение в нижней части моего вопроса.