RedHat OpenShift
Implantar Componentes SUSE® Security Separados com RedHat OpenShift
SUSE® Security é compatível com plug-ins SDN ovs padrão, bem como outros como flannel, weave ou calico. Os exemplos abaixo assumem que um plug-in ovs padrão está sendo usado. Isso também assume que um registro docker local será usado (veja as instruções no final para criar o segredo para puxar dinamicamente do neuvector ou Docker Hub).
SUSE® Security suporta implantação baseada em Helm com um gráfico Helm em https://github.com/neuvector/neuvector-helm.. O Operador SUSE® Security também pode ser usado para implantar e é baseado no gráfico Helm. Para implantar as versões mais recentes do contêiner SUSE® Security usando um Operador, use o Operador Certificado da Red Hat do Operator Hub ou o operador da comunidade, conforme detalhado na seção do Operador.
Para implantar manualmente, primeiro puxe os contêineres SUSE® Security apropriados do registro SUSE® Security para o seu registro local. Nota: a imagem do scanner deve ser puxada regularmente para atualizações do banco de dados CVE de SUSE® Security.
SUSE® Security Imagens no Docker Hub
As imagens estão no SUSE® Security registro Docker Hub. Use a tag de versão apropriada para o manager, controller e enforcer, e deixe a versão como 'latest' para scanner e updater. Por exemplo:
-
neuvector/manager:5.4.3
-
neuvector/controller:5.4.3
-
neuvector/enforcer:5.4.3
-
neuvector/scanner:latest
-
neuvector/updater:latest
Por favor, certifique-se de atualizar as referências de imagem nos arquivos yaml apropriados.
Se implantando com o SUSE® Security gráfico Helm atual (v1.8.9+), as seguintes alterações devem ser feitas em values.yml:
-
Atualize o registro para docker.io
-
Atualize os nomes/tags das imagens para a versão atual no Docker Hub, conforme mostrado acima.
-
Deixe o imagePullSecrets vazio
Implante no OpenShift
docker login docker.io
docker pull docker.io/neuvector/manager:<version>
docker pull docker.io/neuvector/controller:<version>
docker pull docker.io/neuvector/enforcer:<version>
docker pull docker.io/neuvector/scanner
docker pull docker.io/neuvector/updater
docker logout docker.io
O arquivo de amostra abaixo implantará um manager, 3 controller e 2 pods de scanner. Ele implantará um enforcer em cada nó como um DaemonSet, incluindo no nó mestre (se agendável). Veja a seção inferior para especificar nós dedicados de manager ou controller usando rótulos de nó. Nota: Não é recomendado implantar (escalar) mais de um manager atrás de um balanceador de carga devido a possíveis problemas de estado de sessão. Se você planeja usar uma reivindicação de PersistentVolume para armazenar o backup dos arquivos de configuração de SUSE® Security, consulte a seção geral de Backup/Dados Persistentes na visão geral de Implantação em Produção.
Em seguida, defina a rota e permita contêineres privilegiados SUSE® Security usando as instruções abaixo. Por padrão, o OpenShift não permite contêineres privilegiados. Além disso, por padrão, o OpenShift não agenda pods no nó mestre. Veja as instruções no final para habilitar/desabilitar isso.
|
Consulte a seção de Integração Empresarial para detalhes sobre a integração com os controles de acesso com base em função (RBACs) do OpenShift. |
-
Faça login como um usuário normal
oc login -u <user_name> -
Criar um novo projeto.
Se o argumento --node-selector for usado ao criar um projeto, isso restringirá a colocação de pods, como para o SUSE® Security enforcer, a nós específicos.
oc new-project neuvector -
Envie SUSE® Security imagens para o registro docker do OpenShift.
Para OpenShift 4.6+, mude docker-registry.default.svc abaixo para image-registry.openshift-image-registry.svc nos comandos abaixo
docker login -u <user_name> -p `oc whoami -t` docker-registry.default.svc:5000 docker tag docker.io/neuvector/enforcer:<version> docker-registry.default.svc:5000/neuvector/enforcer:<version> docker tag docker.io/neuvector/controller:<version> docker-registry.default.svc:5000/neuvector/controller:<version> docker tag docker.io/neuvector/manager:<version> docker-registry.default.svc:5000/neuvector/manager:<version> docker tag docker.io/neuvector/scanner docker-registry.default.svc:5000/neuvector/scanner docker tag docker.io/neuvector/updater docker-registry.default.svc:5000/neuvector/updater docker push docker-registry.default.svc:5000/neuvector/enforcer:<version> docker push docker-registry.default.svc:5000/neuvector/controller:<version> docker push docker-registry.default.svc:5000/neuvector/manager:<version> docker push docker-registry.default.svc:5000/neuvector/scanner docker push docker-registry.default.svc:5000/neuvector/updater docker logout docker-registry.default.svc:5000Consulte a seção Atualizando o Banco de Dados CVE abaixo para recomendações sobre como manter a imagem do scanner mais recente atualizada em seu registro.
-
Faça login como conta system:admin
oc login -u system:admin -
Crie contas de serviço e conceda acesso ao SCC privilegiado
oc create sa controller -n neuvector oc create sa enforcer -n neuvector oc create sa basic -n neuvector oc create sa updater -n neuvector oc create sa scanner -n neuvector oc create sa registry-adapter -n neuvector oc create sa cert-upgrader -n neuvector oc -n neuvector adm policy add-scc-to-user privileged -z enforcerAs seguintes informações serão adicionadas aos usuários do SCC privilegiado:
- system:serviceaccount:neuvector:enforcerAdicione um novo scc neuvector-scc-controller para a conta de serviço do controller no OpenShift, criando um arquivo com:
allowHostDirVolumePlugin: false allowHostIPC: false allowHostNetwork: false allowHostPID: false allowHostPorts: false allowPrivilegeEscalation: false allowPrivilegedContainer: false allowedCapabilities: null apiVersion: security.openshift.io/v1 defaultAddCapabilities: null fsGroup: type: RunAsAny groups: [] kind: SecurityContextConstraints metadata: name: neuvector-scc-controller priority: null readOnlyRootFilesystem: false requiredDropCapabilities: - ALL runAsUser: type: RunAsAny seLinuxContext: type: RunAsAny supplementalGroups: type: RunAsAny users: [] volumes: - configMap - downwardAPI - emptyDir - persistentVolumeClaim - azureFile - projected - secretEm seguida, aplique
oc apply -f (filename)Em seguida, execute o seguinte comando para vincular a conta de serviço do controller ao scc neuvector-scc-controller.
oc -n neuvector adm policy add-scc-to-user neuvector-scc-controller -z controllerNo OpenShift 4.6+, use o seguinte para verificar:
oc get rolebinding system:openshift:scc:privileged -n neuvector -o wideNAME ROLE AGE USERS GROUPS SERVICEACCOUNTS system:openshift:scc:privileged ClusterRole/system:openshift:scc:privileged 9m22s neuvector/enforcerExecute este comando para verificar o SUSE® Security serviço para o Controller:
oc get rolebinding system:openshift:scc:neuvector-scc-controller -n neuvector -o wideA saída será parecida com
NAME ROLE AGE USERS GROUPS SERVICEACCOUNTS System:openshift:scc:neuvector-scc-controller ClusterRole/system:openshift:scc:neuvector-scc-controller 9m22s neuvector/controller -
Crie os recursos personalizados (CRD) para SUSE® Security as regras de segurança. Para OpenShift 4.6+ (Kubernetes 1.19+):
oc apply -f https://raw.githubusercontent.com/neuvector/manifests/main/kubernetes/5.4.0/crd-k8s-1.19.yaml oc apply -f https://raw.githubusercontent.com/neuvector/manifests/main/kubernetes/5.4.0/waf-crd-k8s-1.19.yaml oc apply -f https://raw.githubusercontent.com/neuvector/manifests/main/kubernetes/5.4.0/dlp-crd-k8s-1.19.yaml oc apply -f https://raw.githubusercontent.com/neuvector/manifests/main/kubernetes/5.4.0/com-crd-k8s-1.19.yaml oc apply -f https://raw.githubusercontent.com/neuvector/manifests/main/kubernetes/5.4.0/vul-crd-k8s-1.19.yaml oc apply -f https://raw.githubusercontent.com/neuvector/manifests/main/kubernetes/5.4.0/admission-crd-k8s-1.19.yaml oc apply -f https://raw.githubusercontent.com/neuvector/manifests/main/kubernetes/5.4.0/5.4.3_group-definition-k8s.yaml -
Adicione permissão de leitura para acessar a API do kubernetes e os RBACs do OpenShift.
A implantação padrão SUSE® Security 5.2+ usa contas de serviço com privilégios mínimos em vez da conta padrão. Veja abaixo se estiver atualizando para 5.2+ a partir de uma versão anterior a 5.2.
Se você estiver atualizando para 5.3.0+, execute os seguintes comandos com base na sua versão atual:
-
Versão 5.2.0
-
Versões anteriores a 5.2.0
oc delete clusterrole neuvector-binding-nvsecurityrules neuvector-binding-nvadmissioncontrolsecurityrules neuvector-binding-nvdlpsecurityrules neuvector-binding-nvwafsecurityrulesoc delete clusterrolebinding neuvector-binding-app neuvector-binding-rbac neuvector-binding-admission neuvector-binding-customresourcedefinition neuvector-binding-nvsecurityrules neuvector-binding-view neuvector-binding-nvwafsecurityrules neuvector-binding-nvadmissioncontrolsecurityrules neuvector-binding-nvdlpsecurityrules neuvector-binding-co oc delete rolebinding neuvector-admin -n neuvectoroc create clusterrole neuvector-binding-app --verb=get,list,watch,update --resource=nodes,pods,services,namespaces oc create clusterrole neuvector-binding-rbac --verb=get,list,watch --resource=rolebindings.rbac.authorization.k8s.io,roles.rbac.authorization.k8s.io,clusterrolebindings.rbac.authorization.k8s.io,clusterroles.rbac.authorization.k8s.io,imagestreams.image.openshift.io oc adm policy add-cluster-role-to-user neuvector-binding-app system:serviceaccount:neuvector:controller oc adm policy add-cluster-role-to-user neuvector-binding-rbac system:serviceaccount:neuvector:controller oc create clusterrole neuvector-binding-admission --verb=get,list,watch,create,update,delete --resource=validatingwebhookconfigurations,mutatingwebhookconfigurations oc adm policy add-cluster-role-to-user neuvector-binding-admission system:serviceaccount:neuvector:controller oc create clusterrole neuvector-binding-customresourcedefinition --verb=watch,create,get,update --resource=customresourcedefinitions oc adm policy add-cluster-role-to-user neuvector-binding-customresourcedefinition system:serviceaccount:neuvector:controller oc create clusterrole neuvector-binding-nvsecurityrules --verb=get,list,delete --resource=nvsecurityrules,nvclustersecurityrules oc create clusterrole neuvector-binding-nvadmissioncontrolsecurityrules --verb=get,list,delete --resource=nvadmissioncontrolsecurityrules oc create clusterrole neuvector-binding-nvdlpsecurityrules --verb=get,list,delete --resource=nvdlpsecurityrules oc create clusterrole neuvector-binding-nvwafsecurityrules --verb=get,list,delete --resource=nvwafsecurityrules oc adm policy add-cluster-role-to-user neuvector-binding-nvsecurityrules system:serviceaccount:neuvector:controller oc adm policy add-cluster-role-to-user view system:serviceaccount:neuvector:controller --rolebinding-name=neuvector-binding-view oc adm policy add-cluster-role-to-user neuvector-binding-nvwafsecurityrules system:serviceaccount:neuvector:controller oc adm policy add-cluster-role-to-user neuvector-binding-nvadmissioncontrolsecurityrules system:serviceaccount:neuvector:controller oc adm policy add-cluster-role-to-user neuvector-binding-nvdlpsecurityrules system:serviceaccount:neuvector:controller oc create role neuvector-binding-scanner --verb=get,patch,update,watch --resource=deployments -n neuvector oc adm policy add-role-to-user neuvector-binding-scanner system:serviceaccount:neuvector:updater system:serviceaccount:neuvector:controller -n neuvector --role-namespace neuvector oc create clusterrole neuvector-binding-co --verb=get,list --resource=clusteroperators oc adm policy add-cluster-role-to-user neuvector-binding-co system:serviceaccount:neuvector:enforcer system:serviceaccount:neuvector:controller oc create role neuvector-binding-secret --verb=get,list,watch --resource=secrets -n neuvector oc adm policy add-role-to-user neuvector-binding-secret system:serviceaccount:neuvector:controller system:serviceaccount:neuvector:enforcer system:serviceaccount:neuvector:scanner system:serviceaccount:neuvector:registry-adapter -n neuvector --role-namespace neuvector oc create clusterrole neuvector-binding-nvcomplianceprofiles --verb=get,list,delete --resource=nvcomplianceprofiles oc create clusterrolebinding neuvector-binding-nvcomplianceprofiles --clusterrole=neuvector-binding-nvcomplianceprofiles --serviceaccount=neuvector:controller oc create clusterrole neuvector-binding-nvvulnerabilityprofiles --verb=get,list,delete --resource=nvvulnerabilityprofiles oc create clusterrolebinding neuvector-binding-nvvulnerabilityprofiles --clusterrole=neuvector-binding-nvvulnerabilityprofiles --serviceaccount=neuvector:controller oc apply -f https://raw.githubusercontent.com/neuvector/manifests/main/kubernetes/5.4.0/neuvector-roles-k8s.yaml oc create role neuvector-binding-lease --verb=create,get,update --resource=leases -n neuvector oc adm policy add-role-to-user neuvector-binding-cert-upgrader system:serviceaccount:neuvector:cert-upgrader -n neuvector --role-namespace neuvector oc adm policy add-role-to-user neuvector-binding-job-creation system:serviceaccount:neuvector:cert-upgrader -n neuvector --role-namespace neuvector oc adm policy add-role-to-user neuvector-binding-lease system:serviceaccount:neuvector:controller system:serviceaccount:neuvector:cert-upgrader -n neuvector --role-namespace neuvector oc create clusterrole neuvector-binding-nvgroupdefinitions --verb=get,list,delete --resource=nvgroupdefinitions oc create clusterrolebinding neuvector-binding-nvgroupdefinitions --clusterrole=neuvector-binding-nvgroupdefinitions --serviceaccount=neuvector:controller -
-
Execute o seguinte comando para verificar se as contas de serviço neuvector/controller, neuvector/enforcer e neuvector/updater foram adicionadas com sucesso.
oc get ClusterRoleBinding neuvector-binding-app neuvector-binding-rbac neuvector-binding-admission neuvector-binding-customresourcedefinition neuvector-binding-nvsecurityrules neuvector-binding-view neuvector-binding-nvwafsecurityrules neuvector-binding-nvadmissioncontrolsecurityrules neuvector-binding-nvdlpsecurityrules neuvector-binding-co -o wideSaída de exemplo:
NAME ROLE AGE USERS GROUPS SERVICEACCOUNTS neuvector-binding-app ClusterRole/neuvector-binding-app 56d neuvector/controller neuvector-binding-rbac ClusterRole/neuvector-binding-rbac 34d neuvector/controller neuvector-binding-admission ClusterRole/neuvector-binding-admission 72d neuvector/controller neuvector-binding-customresourcedefinition ClusterRole/neuvector-binding-customresourcedefinition 72d neuvector/controller neuvector-binding-nvsecurityrules ClusterRole/neuvector-binding-nvsecurityrules 72d neuvector/controller neuvector-binding-view ClusterRole/view 72d neuvector/controller neuvector-binding-nvwafsecurityrules ClusterRole/neuvector-binding-nvwafsecurityrules 72d neuvector/controller neuvector-binding-nvadmissioncontrolsecurityrules ClusterRole/neuvector-binding-nvadmissioncontrolsecurityrules 72d neuvector/controller neuvector-binding-nvdlpsecurityrules ClusterRole/neuvector-binding-nvdlpsecurityrules 72d neuvector/controller neuvector-binding-co ClusterRole/neuvector-binding-co 72d neuvector/enforcer, neuvector/controllerE este comando:
oc get RoleBinding neuvector-binding-scanner neuvector-binding-cert-upgrader neuvector-binding-job-creation neuvector-binding-lease neuvector-binding-secret -n neuvector -o wideSaída de exemplo:
NAME ROLE AGE USERS GROUPS SERVICEACCOUNTS neuvector-binding-scanner Role/neuvector-binding-scanner 56m neuvector/controller, neuvector/updater neuvector-binding-cert-upgrader Role/neuvector-binding-cert-upgrader 56m neuvector/cert-upgrader neuvector-binding-job-creation Role/neuvector-binding-job-creation 56m neuvector/controller neuvector-binding-lease Role/neuvector-binding-lease 56m neuvector/controller, neuvector/cert-upgrader neuvector-binding-secret Role/neuvector-binding-secret 56m neuvector/controller, neuvector/enforcer, neuvector/scanner, neuvector/registry-adapter -
(Opcional) Crie o Master da Federação e/ou Serviços de Gerenciamento Multi-Cluster Remoto. Se você planeja usar as funções de gerenciamento de múltiplos clusters em SUSE® Security, um cluster deve ter o serviço Federation Master implantado, e cada cluster remoto deve ter o serviço Federation Worker implantado. Para flexibilidade, você pode optar por implantar tanto os serviços Master quanto Worker em cada cluster, para que qualquer cluster possa ser um master ou remoto.
Serviços de Gerenciamento Federado
apiVersion: v1 kind: Service metadata: name: neuvector-service-controller-fed-master namespace: neuvector spec: ports: - port: 11443 name: fed protocol: TCP type: NodePort selector: app: neuvector-controller-pod --- apiVersion: v1 kind: Service metadata: name: neuvector-service-controller-fed-worker namespace: neuvector spec: ports: - port: 10443 name: fed protocol: TCP type: NodePort selector: app: neuvector-controller-podEm seguida, crie o(s) serviço(s) apropriado(s):
oc create -f nv_master_worker.yaml -
Crie os serviços e pods do neuvector com base nos exemplos de yamls abaixo.
Substitua as tags <version> para as referências de imagem do manager, controller e enforcer no arquivo yaml. Além disso, faça quaisquer outras modificações necessárias para o seu ambiente de implantação.
oc create -f <compose file>
É isso aí! Você deve ser capaz de se conectar ao SUSE® Security console e fazer login com admin:admin, por exemplo, https://<public-ip>:8443.
Para ver como acessar o console do serviço neuvector-webui:
oc get services -n neuvector
Se você criou seu próprio namespace em vez de usar “neuvector”, substitua todas as instâncias de “namespace: neuvector” e outras referências de namespace pelo seu namespace nos arquivos yaml de exemplo abaixo.
OpenShift 4.6+ com runtime CRI-O
O nome do seu registro OpenShift padrão pode ter mudado de docker-registry para openshift-image-registry. Você pode precisar alterar o registro de imagem para o manager, controller e enforcer no yaml de exemplo.
|
O tipo NodePort é usado para os serviços fed-master e fed-worker em vez de LoadBalancer. Você pode precisar ajustar para sua implantação. |
Se estiver usando o runtime CRI-O, veja este exemplo CRI-O.
Taints e Tolerâncias do Nó Master
Todas as informações de taint devem corresponder para agendar os enforcers nos nós. Para verificar as informações de taint em um nó (por exemplo, Master):
$ oc get node taintnodename -o yaml
Saída de exemplo:
spec:
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
# there may be an extra info for taint as below
- effect: NoSchedule
key: mykey
value: myvalue
Se houver taints adicionais como acima, adicione estes à seção de tolerâncias do yaml de exemplo:
spec:
template:
spec:
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
# if there is an extra info for taints as above, please add it here. This is required to match all the taint info defined on the taint node. Otherwise, the Enforcer won't deploy on the taint node
- effect: NoSchedule
key: mykey
value: myvalue
Usando Rótulos de Nó para Nós de Manager e Controller
Para controlar em quais nós o manager e o controller são implantados, rotule cada nó. Substitua <nodename> pelo nome apropriado do nó.
oc label nodes <nodename> nvcontroller=true
Em seguida, adicione um nodeSelector ao arquivo yaml para as seções de implantação do manager e do controller. Por exemplo:
- mountPath: /host/cgroup
name: cgroup-vol
readOnly: true
nodeSelector:
nvcontroller: "true"
restartPolicy: Always
Para evitar que o enforcer seja implantado em um nó controller, se for um nó de gerenciamento dedicado (sem contêineres de aplicativo a serem monitorados), adicione um nodeAffinity à seção yaml do enforcer. Por exemplo:
app: neuvector-enforcer-pod
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: nvcontroller
operator: NotIn
values: ["true"]
imagePullSecrets:
Atualizando o Banco de Dados CVE em Implantações OpenShift
A imagem do scanner mais recente sempre contém a atualização mais recente do banco de dados CVE de SUSE® Security. Por esta razão, uma tag de versão não é recomendada ao puxar a imagem. No entanto, atualizar o banco de dados CVE requer que a imagem do scanner mais recente seja puxada regularmente, para que o trabalho cron do atualizador possa reimplantar o(s) scanner(s). Os exemplos acima assumem que as SUSE® Security imagens são puxadas, marcadas e enviadas para um registro local do OpenShift. A implantação é então a partir deste registro em vez de diretamente do neuvector (ou do SUSE® Security registro legado no Docker Hub).
Para atualizar regularmente o banco de dados CVE, recomendamos que um script/trabalho cron seja criado para puxar a SUSE® Security imagem do scanner mais recente e realizar as etapas de marcação e envio para o registro local. Isso garantirá que o banco de dados CVE esteja sendo atualizado regularmente e que imagens e contêineres estejam sendo verificados em busca de novas vulnerabilidades.
Atualizações Contínuas
Ferramentas de orquestração como Kubernetes, RedHat OpenShift e Rancher suportam atualizações contínuas com políticas configuráveis. Você pode usar esse recurso para atualizar os SUSE® Security contêineres. O mais importante será garantir que haja pelo menos um Allinone/controller em execução para que políticas, logs e dados de conexão não sejam perdidos. Certifique-se de que haja, no mínimo, 30 segundos entre as atualizações dos contêineres para que um novo líder possa ser eleito e os dados sincronizados entre os controladores.
Antes de iniciar as atualizações contínuas, por favor, faça o pull e marque os contêineres SUSE® Security da mesma forma que no início desta página. Você pode fazer o pull da versão mais recente sem um número de versão, mas para acionar a atualização contínua, será necessário marcar a imagem com uma versão.
Por exemplo, para o controlador (mais recente):
docker pull neuvector/controller
Então, para marcar/push, se a versão mais recente for 2.0.1, o mesmo que o passo 3 no topo desta página:
docker login -u <user_name> -p `oc whoami -t` docker-registry.default.svc:5000
docker tag neuvector/controller docker-registry.default.svc:5000/neuvector/controller:2.0.1
docker push docker-registry.default.svc:5000/neuvector/controller:2.0.1
Agora você pode atualizar seu arquivo YAML com essas novas versões e ‘apply’, ou usar o comando ‘oc set image …’ para acionar a atualização contínua. Por favor, veja os exemplos de atualizações contínuas do Kubernetes nesta seção de Produção para saber como lançar e monitorar as atualizações dos contêineres SUSE® Security.
Os arquivos YAML de implantação fornecidos como exemplo já configuram a política de atualização contínua. Se você estiver atualizando via o SUSE® Security Helm chart, por favor, faça o pull do chart mais recente para configurar corretamente novos recursos, como controle de admissão, e exclua a antiga função de cluster e a vinculação de função de cluster para SUSE® Security.
Habilitando a API REST
Para habilitar a API REST, a porta 10443 deve ser configurada da seguinte forma:
apiVersion: v1
kind: Service
metadata:
name: neuvector-service-controller
namespace: neuvector
spec:
ports:
- port: 10443
name: controller
protocol: TCP
type: NodePort
selector:
app: neuvector-controller-pod
Habilitar/Desabilitar Agendamento no Nó Mestre
Os seguintes comandos podem ser usados para habilitar/desabilitar o agendamento no nó mestre.
oc adm manage-node nodename --schedulable
oc adm manage-node nodename --schedulable=false
Implantação do OpenShift em Modo Não Privilegiado
As seguintes instruções podem ser usadas para implantar SUSE® Security sem usar contêineres em modo privilegiado. O controlador já está em modo não privilegiado e a implantação do enforcer deve ser alterada, como mostrado nos trechos abaixo.
Enforcer:
spec:
template:
metadata:
annotations:
container.apparmor.security.beta.kubernetes.io/neuvector-enforcer-pod: unconfined
# this line below is required to be added if k8s version is pre-v1.19
# container.seccomp.security.alpha.kubernetes.io/neuvector-enforcer-pod: unconfined
spec:
containers:
securityContext:
# openshift
seLinuxOptions:
type: unconfined_t
# the following two lines are required for k8s v1.19+. pls comment out both lines if version is pre-1.19. Otherwise, a validating data error message will show
seccompProfile:
type: Unconfined
capabilities:
add:
- SYS_ADMIN
- NET_ADMIN
- SYS_PTRACE
- IPC_LOCK
- NET_RAW
- SYS_CHROOT
- MKNOD
- AUDIT_WRITE
- SETFCAP
O exemplo a seguir é uma referência completa de implantação usando o tempo de execução cri-o. Para outros tempos de execução, por favor, faça as alterações apropriadas nos volumes/montagens de volume para o crio.sock.
Clique aqui para ver os detalhes
apiVersion: v1
kind: Service
metadata:
name: neuvector-svc-crd-webhook
namespace: neuvector
spec:
ports:
- port: 443
targetPort: 30443
protocol: TCP
name: crd-webhook
type: ClusterIP
selector:
app: neuvector-controller-pod
---
apiVersion: v1
kind: Service
metadata:
name: neuvector-svc-admission-webhook
namespace: neuvector
spec:
ports:
- port: 443
targetPort: 20443
protocol: TCP
name: admission-webhook
type: ClusterIP
selector:
app: neuvector-controller-pod
---
apiVersion: v1
kind: Service
metadata:
name: neuvector-service-webui
namespace: neuvector
spec:
ports:
- port: 8443
name: manager
protocol: TCP
type: ClusterIP
selector:
app: neuvector-manager-pod
---
apiVersion: v1
kind: Service
metadata:
name: neuvector-svc-controller
namespace: neuvector
spec:
ports:
- port: 18300
protocol: "TCP"
name: "cluster-tcp-18300"
- port: 18301
protocol: "TCP"
name: "cluster-tcp-18301"
- port: 18301
protocol: "UDP"
name: "cluster-udp-18301"
clusterIP: None
selector:
app: neuvector-controller-pod
---
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: neuvector-route-webui
namespace: neuvector
spec:
to:
kind: Service
name: neuvector-service-webui
port:
targetPort: manager
tls:
termination: passthrough
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: neuvector-manager-pod
namespace: neuvector
spec:
selector:
matchLabels:
app: neuvector-manager-pod
replicas: 1
template:
metadata:
labels:
app: neuvector-manager-pod
spec:
serviceAccountName: basic
serviceAccount: basic
containers:
- name: neuvector-manager-pod
image: image-registry.openshift-image-registry.svc:5000/neuvector/manager:<version>
env:
- name: CTRL_SERVER_IP
value: neuvector-svc-controller.neuvector
restartPolicy: Always
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: neuvector-controller-pod
namespace: neuvector
spec:
selector:
matchLabels:
app: neuvector-controller-pod
minReadySeconds: 60
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
replicas: 3
template:
metadata:
labels:
app: neuvector-controller-pod
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- neuvector-controller-pod
topologyKey: "kubernetes.io/hostname"
serviceAccountName: controller
serviceAccount: controller
containers:
- name: neuvector-controller-pod
image: image-registry.openshift-image-registry.svc:5000/neuvector/controller:<version>
securityContext:
runAsUser: 0
readinessProbe:
exec:
command:
- cat
- /tmp/ready
initialDelaySeconds: 5
periodSeconds: 5
env:
- name: CLUSTER_JOIN_ADDR
value: neuvector-svc-controller.neuvector
- name: CLUSTER_ADVERTISED_ADDR
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: CLUSTER_BIND_ADDR
valueFrom:
fieldRef:
fieldPath: status.podIP
# - name: CTRL_PERSIST_CONFIG
# value: "1"
volumeMounts:
# - mountPath: /var/neuvector
# name: nv-share
# readOnly: false
- mountPath: /etc/config
name: config-volume
readOnly: true
terminationGracePeriodSeconds: 300
restartPolicy: Always
volumes:
# - name: nv-share
# persistentVolumeClaim:
# claimName: neuvector-data
- name: config-volume
projected:
sources:
- configMap:
name: neuvector-init
optional: true
- secret:
name: neuvector-init
optional: true
- secret:
name: neuvector-secret
optional: true
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: neuvector-enforcer-pod
namespace: neuvector
spec:
selector:
matchLabels:
app: neuvector-enforcer-pod
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
app: neuvector-enforcer-pod
annotations:
container.apparmor.security.beta.kubernetes.io/neuvector-enforcer-pod: unconfined
# Add the following for pre-v1.19
# container.seccomp.security.alpha.kubernetes.io/neuvector-enforcer-pod: unconfined
spec:
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
hostPID: true
serviceAccountName: enforcer
serviceAccount: enforcer
containers:
- name: neuvector-enforcer-pod
image: image-registry.openshift-image-registry.svc:5000/neuvector/enforcer:<version>
securityContext:
# openshift
seLinuxOptions:
type: unconfined_t
# the following two lines are required for k8s v1.19+. pls comment out both lines if version is pre-1.19. Otherwise, a validating data error message will show
seccompProfile:
type: Unconfined
capabilities:
add:
- SYS_ADMIN
- NET_ADMIN
- SYS_PTRACE
- IPC_LOCK
- NET_RAW
- SYS_CHROOT
- MKNOD
- AUDIT_WRITE
- SETFCAP
env:
- name: CLUSTER_JOIN_ADDR
value: neuvector-svc-controller.neuvector
- name: CLUSTER_ADVERTISED_ADDR
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: CLUSTER_BIND_ADDR
valueFrom:
fieldRef:
fieldPath: status.podIP
volumeMounts:
- mountPath: /lib/modules
name: modules-vol
readOnly: true
# - mountPath: /run/runtime.sock
# name: runtime-sock
# readOnly: true
# - mountPath: /host/proc
# name: proc-vol
# readOnly: true
# - mountPath: /host/cgroup
# name: cgroup-vol
# readOnly: true
- mountPath: /var/nv_debug
name: nv-debug
readOnly: false
terminationGracePeriodSeconds: 1200
restartPolicy: Always
volumes:
- name: modules-vol
hostPath:
path: /lib/modules
# - name: runtime-sock
# hostPath:
# path: /var/run/crio/crio.sock
# - name: proc-vol
# hostPath:
# path: /proc
# - name: cgroup-vol
# hostPath:
# path: /sys/fs/cgroup
- name: nv-debug
hostPath:
path: /var/nv_debug
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: neuvector-scanner-pod
namespace: neuvector
spec:
selector:
matchLabels:
app: neuvector-scanner-pod
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
replicas: 2
template:
metadata:
labels:
app: neuvector-scanner-pod
spec:
serviceAccountName: scanner
serviceAccount: scanner
containers:
- name: neuvector-scanner-pod
image: image-registry.openshift-image-registry.svc:5000/neuvector/scanner:<version>
imagePullPolicy: Always
env:
- name: CLUSTER_JOIN_ADDR
value: neuvector-svc-controller.neuvector
restartPolicy: Always
---
apiVersion: batch/v1
kind: CronJob
metadata:
name: neuvector-updater-pod
namespace: neuvector
spec:
schedule: "0 0 * * *"
jobTemplate:
spec:
template:
metadata:
labels:
app: neuvector-updater-pod
spec:
serviceAccountName: updater
serviceAccount: updater
containers:
- name: neuvector-updater-pod
image: image-registry.openshift-image-registry.svc:5000/neuvector/updater:<version>
imagePullPolicy: Always
command:
- /bin/sh
- -c
- TOKEN=`cat /var/run/secrets/kubernetes.io/serviceaccount/token`; /usr/bin/curl -kv -X PATCH -H "Authorization:Bearer $TOKEN" -H "Content-Type:application/strategic-merge-patch+json" -d '{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt":"'`date +%Y-%m-%dT%H:%M:%S%z`'"}}}}}' 'https://kubernetes.default/apis/apps/v1/namespaces/neuvector/deployments/neuvector-scanner-pod'
restartPolicy: Never