OpenShift - Administração
Neste capítulo, cobriremos tópicos como como gerenciar um nó, configurar uma conta de serviço, etc.
Configuração Mestre e Nó
No OpenShift, precisamos usar o comando start junto com OC para inicializar um novo servidor. Ao lançar um novo mestre, precisamos usar o mestre junto com o comando de início, enquanto ao iniciar o novo nó, precisamos usar o nó junto com o comando de início. Para fazer isso, precisamos criar arquivos de configuração para o mestre e também para os nós. Podemos criar um arquivo de configuração básica para o mestre e o nó usando o seguinte comando.
Para arquivo de configuração mestre
$ openshift start master --write-config = /openshift.local.config/master
Para arquivo de configuração de nó
$ oadm create-node-config --node-dir = /openshift.local.config/node-<node_hostname> --node = <node_hostname> --hostnames = <hostname>,<ip_address>
Depois de executar os comandos a seguir, obteremos os arquivos de configuração básicos que podem ser usados como ponto de partida para a configuração. Posteriormente, podemos ter o mesmo arquivo para inicializar os novos servidores.
apiLevels:
- v1beta3
- v1
apiVersion: v1
assetConfig:
logoutURL: ""
masterPublicURL: https://172.10.12.1:7449
publicURL: https://172.10.2.2:7449/console/
servingInfo:
bindAddress: 0.0.0.0:7449
certFile: master.server.crt
clientCA: ""
keyFile: master.server.key
maxRequestsInFlight: 0
requestTimeoutSeconds: 0
controllers: '*'
corsAllowedOrigins:
- 172.10.2.2:7449
- 127.0.0.1
- localhost
dnsConfig:
bindAddress: 0.0.0.0:53
etcdClientInfo:
ca: ca.crt
certFile: master.etcd-client.crt
keyFile: master.etcd-client.key
urls:
- https://10.0.2.15:4001
etcdConfig:
address: 10.0.2.15:4001
peerAddress: 10.0.2.15:7001
peerServingInfo:
bindAddress: 0.0.0.0:7001
certFile: etcd.server.crt
clientCA: ca.crt
keyFile: etcd.server.key
servingInfo:
bindAddress: 0.0.0.0:4001
certFile: etcd.server.crt
clientCA: ca.crt
keyFile: etcd.server.key
storageDirectory: /root/openshift.local.etcd
etcdStorageConfig:
kubernetesStoragePrefix: kubernetes.io
kubernetesStorageVersion: v1
openShiftStoragePrefix: openshift.io
openShiftStorageVersion: v1
imageConfig:
format: openshift/origin-${component}:${version}
latest: false
kind: MasterConfig
kubeletClientInfo:
ca: ca.crt
certFile: master.kubelet-client.crt
keyFile: master.kubelet-client.key
port: 10250
kubernetesMasterConfig:
apiLevels:
- v1beta3
- v1
apiServerArguments: null
controllerArguments: null
masterCount: 1
masterIP: 10.0.2.15
podEvictionTimeout: 5m
schedulerConfigFile: ""
servicesNodePortRange: 30000-32767
servicesSubnet: 172.30.0.0/16
staticNodeNames: []
masterClients:
externalKubernetesKubeConfig: ""
openshiftLoopbackKubeConfig: openshift-master.kubeconfig
masterPublicURL: https://172.10.2.2:7449
networkConfig:
clusterNetworkCIDR: 10.1.0.0/16
hostSubnetLength: 8
networkPluginName: ""
serviceNetworkCIDR: 172.30.0.0/16
oauthConfig:
assetPublicURL: https://172.10.2.2:7449/console/
grantConfig:
method: auto
identityProviders:
- challenge: true
login: true
name: anypassword
provider:
apiVersion: v1
kind: AllowAllPasswordIdentityProvider
masterPublicURL: https://172.10.2.2:7449/
masterURL: https://172.10.2.2:7449/
sessionConfig:
sessionMaxAgeSeconds: 300
sessionName: ssn
sessionSecretsFile: ""
tokenConfig:
accessTokenMaxAgeSeconds: 86400
authorizeTokenMaxAgeSeconds: 300
policyConfig:
bootstrapPolicyFile: policy.json
openshiftInfrastructureNamespace: openshift-infra
openshiftSharedResourcesNamespace: openshift
projectConfig:
defaultNodeSelector: ""
projectRequestMessage: ""
projectRequestTemplate: ""
securityAllocator:
mcsAllocatorRange: s0:/2
mcsLabelsPerProject: 5
uidAllocatorRange: 1000000000-1999999999/10000
routingConfig:
subdomain: router.default.svc.cluster.local
serviceAccountConfig:
managedNames:
- default
- builder
- deployer
masterCA: ca.crt
privateKeyFile: serviceaccounts.private.key
privateKeyFile: serviceaccounts.private.key
publicKeyFiles:
- serviceaccounts.public.key
servingInfo:
bindAddress: 0.0.0.0:8443
certFile: master.server.crt
clientCA: ca.crt
keyFile: master.server.key
maxRequestsInFlight: 0
requestTimeoutSeconds: 3600
Arquivos de configuração de nó
allowDisabledDocker: true
apiVersion: v1
dnsDomain: cluster.local
dnsIP: 172.10.2.2
dockerConfig:
execHandlerName: native
imageConfig:
format: openshift/origin-${component}:${version}
latest: false
kind: NodeConfig
masterKubeConfig: node.kubeconfig
networkConfig:
mtu: 1450
networkPluginName: ""
nodeIP: ""
nodeName: node1.example.com
podManifestConfig:
path: "/path/to/pod-manifest-file"
fileCheckIntervalSeconds: 30
servingInfo:
bindAddress: 0.0.0.0:10250
certFile: server.crt
clientCA: node-client-ca.crt
keyFile: server.key
volumeDirectory: /root/openshift.local.volumes
Esta é a aparência dos arquivos de configuração do nó. Assim que tivermos esses arquivos de configuração no lugar, podemos executar o seguinte comando para criar o servidor mestre e de nó.
$ openshift start --master-config = /openshift.local.config/master/master-
config.yaml --node-config = /openshift.local.config/node-<node_hostname>/node-
config.yaml
Gerenciando Nós
No OpenShift, temos o utilitário de linha de comando OC, que é usado principalmente para realizar todas as operações no OpenShift. Podemos usar os seguintes comandos para gerenciar os nós.
Para listar um nó
$ oc get nodes
NAME LABELS
node1.example.com kubernetes.io/hostname = vklnld1446.int.example.com
node2.example.com kubernetes.io/hostname = vklnld1447.int.example.com
Descrever detalhes sobre um nó
$ oc describe node <node name>
Excluindo um nó
$ oc delete node <node name>
Listagem de pods em um nó
$ oadm manage-node <node1> <node2> --list-pods [--pod-selector=<pod_selector>] [-o json|yaml]
Avaliação de pods em um nó
$ oadm manage-node <node1> <node2> --evacuate --dry-run [--pod-selector=<pod_selector>]
Autenticação de configuração
No mestre OpenShift, há um servidor OAuth integrado, que pode ser usado para gerenciar a autenticação. Todos os usuários do OpenShift obtêm o token desse servidor, o que os ajuda a se comunicar com a API do OpenShift.
Existem diferentes tipos de nível de autenticação no OpenShift, que podem ser configurados junto com o arquivo de configuração principal.
- Permitir todos
- Negar tudo
- HTPasswd
- LDAP
- Autenticação básica
- Solicitar cabeçalho
Ao definir a configuração principal, podemos definir a política de identificação onde podemos definir o tipo de política que desejamos usar.
Permitir todos
Permitir todos
oauthConfig:
...
identityProviders:
- name: Allow_Authontication
challenge: true
login: true
provider:
apiVersion: v1
kind: AllowAllPasswordIdentityProvider
Negar tudo
Isso negará o acesso a todos os nomes de usuário e senhas.
oauthConfig:
...
identityProviders:
- name: deny_Authontication
challenge: true
login: true
provider:
apiVersion: v1
kind: DenyAllPasswordIdentityProvider
HTPasswd
HTPasswd é usado para validar o nome de usuário e a senha em relação a uma senha de arquivo criptografada.
Para gerar um arquivo criptografado, a seguir está o comando.
$ htpasswd </path/to/users.htpasswd> <user_name>
Usando o arquivo criptografado.
oauthConfig:
...
identityProviders:
- name: htpasswd_authontication
challenge: true
login: true
provider:
apiVersion: v1
kind: HTPasswdPasswordIdentityProvider
file: /path/to/users.htpasswd
Provedor de identidade LDAP
Isso é usado para autenticação LDAP em que o servidor LDAP desempenha um papel fundamental na autenticação.
oauthConfig:
...
identityProviders:
- name: "ldap_authontication"
challenge: true
login: true
provider:
apiVersion: v1
kind: LDAPPasswordIdentityProvider
attributes:
id:
- dn
email:
- mail
name:
- cn
preferredUsername:
- uid
bindDN: ""
bindPassword: ""
ca: my-ldap-ca-bundle.crt
insecure: false
url: "ldap://ldap.example.com/ou=users,dc=acme,dc=com?uid"
Autenticação Básica
Isso é usado quando a validação de nome de usuário e senha é feita em uma autenticação de servidor para servidor. A autenticação é protegida no URL base e é apresentada no formato JSON.
oauthConfig:
...
identityProviders:
- name: my_remote_basic_auth_provider
challenge: true
login: true
provider:
apiVersion: v1
kind: BasicAuthPasswordIdentityProvider
url: https://www.vklnld908.int.example.com/remote-idp
ca: /path/to/ca.file
certFile: /path/to/client.crt
keyFile: /path/to/client.key
Configurando uma conta de serviço
As contas de serviço fornecem uma maneira flexível de acessar a API OpenShift, expondo o nome de usuário e a senha para autenticação.
Habilitando uma conta de serviço
A conta de serviço usa um par de chaves pública e privada para autenticação. A autenticação na API é feita usando uma chave privada e validando-a com uma chave pública.
ServiceAccountConfig:
...
masterCA: ca.crt
privateKeyFile: serviceaccounts.private.key
publicKeyFiles:
- serviceaccounts.public.key
- ...
Criação de uma conta de serviço
Use o seguinte comando para criar uma conta de serviço
$ Openshift cli create service account <name of server account>
Trabalhando com Proxy HTTP
Na maior parte do ambiente de produção, o acesso direto à Internet é restrito. Eles não são expostos à Internet ou são expostos por meio de um proxy HTTP ou HTTPS. Em um ambiente OpenShift, esta definição de máquina proxy é definida como uma variável de ambiente.
Isso pode ser feito adicionando uma definição de proxy nos arquivos mestre e de nó localizados em /etc/sysconfig. Isso é semelhante ao que fazemos para qualquer outro aplicativo.
Máquina Mestre
/ etc / sysconfig / openshift-master
HTTP_PROXY=http://USERNAME:[email protected]:8080/
HTTPS_PROXY=https://USERNAME:[email protected]:8080/
NO_PROXY=master.vklnld908.int.example.com
Máquina de Nó
/ etc / sysconfig / openshift-node
HTTP_PROXY=http://USERNAME:[email protected]:8080/
HTTPS_PROXY=https://USERNAME:[email protected]:8080/
NO_PROXY=master.vklnld908.int.example.com
Uma vez feito isso, precisamos reiniciar as máquinas mestre e de nó.
Para Docker Pull
/ etc / sysconfig / docker
HTTP_PROXY = http://USERNAME:[email protected]:8080/
HTTPS_PROXY = https://USERNAME:[email protected]:8080/
NO_PROXY = master.vklnld1446.int.example.com
Para fazer um pod funcionar em um ambiente de proxy, isso pode ser feito usando -
containers:
- env:
- name: "HTTP_PROXY"
value: "http://USER:PASSWORD@:10.0.1.1:8080"
O comando do ambiente OC pode ser usado para atualizar o ambiente existente.
Armazenamento OpenShift com NFS
No OpenShift, o conceito de volume persistente e declarações de volume persistentes formam o armazenamento persistente. Este é um dos conceitos-chave em que primeiro o volume persistente é criado e depois o mesmo volume é reivindicado. Para isso, precisamos ter capacidade e espaço em disco suficientes no hardware subjacente.
apiVersion: v1
kind: PersistentVolume
metadata:
name: storage-unit1
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
nfs:
path: /opt
server: 10.12.2.2
persistentVolumeReclaimPolicy: Recycle
Em seguida, usando o comando OC create, crie um Volume Persistente.
$ oc create -f storage-unit1.yaml
persistentvolume " storage-unit1 " created
Reivindicando o volume criado.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: Storage-clame1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
Crie a reivindicação.
$ oc create -f Storage-claim1.yaml
persistentvolume " Storage-clame1 " created
Gerenciamento de usuários e funções
A administração de usuários e funções é usada para gerenciar usuários, seus acessos e controles em diferentes projetos.
Criação de um usuário
Modelos predefinidos podem ser usados para criar novos usuários no OpenShift.
kind: "Template"
apiVersion: "v1"
parameters:
- name: vipin
required: true
objects:
- kind: "User"
apiVersion: "v1"
metadata:
name: "${email}"
- kind: "Identity"
apiVersion: "v1"
metadata:
name: "vipin:${email}"
providerName: "SAML"
providerUserName: "${email}"
- kind: "UserIdentityMapping"
apiVersion: "v1"
identity:
name: "vipin:${email}"
user:
name: "${email}"
Use oc create –f <nome do arquivo> para criar usuários.
$ oc create –f vipin.yaml
Use o seguinte comando para excluir um usuário no OpenShift.
$ oc delete user <user name>
Limitando o acesso do usuário
ResourceQuotas e LimitRanges são usados para limitar os níveis de acesso do usuário. Eles são usados para limitar os pods e contêineres no cluster.
apiVersion: v1
kind: ResourceQuota
metadata:
name: resources-utilization
spec:
hard:
pods: "10"
Criando a cotação usando a configuração acima
$ oc create -f resource-quota.yaml –n –Openshift-sample
Descrevendo a citação do recurso
$ oc describe quota resource-quota -n Openshift-sample
Name: resource-quota
Namespace: Openshift-sample
Resource Used Hard
-------- ---- ----
pods 3 10
Definir os limites do contêiner pode ser usado para limitar os recursos que serão usados pelos contêineres implantados. Eles são usados para definir as limitações máximas e mínimas de certos objetos.
Limitações do projeto do usuário
Isso é basicamente usado para o número de projetos que um usuário pode ter em qualquer ponto do tempo. Eles são feitos basicamente definindo os níveis de usuário em categorias de bronze, prata e ouro.
Precisamos primeiro definir um objeto que detém o valor de quantos projetos uma categoria bronze, prata e ouro pode ter. Isso precisa ser feito no arquivo master-confif.yaml.
admissionConfig:
pluginConfig:
ProjectRequestLimit:
configuration:
apiVersion: v1
kind: ProjectRequestLimitConfig
limits:
- selector:
level: platinum
- selector:
level: gold
maxProjects: 15
- selector:
level: silver
maxProjects: 10
- selector:
level: bronze
maxProjects: 5
Reinicie o servidor mestre.
Atribuindo um usuário a um determinado nível.
$ oc label user vipin level = gold
Mover o usuário para fora da etiqueta, se necessário.
$ oc label user <user_name> level-
Adicionando funções a um usuário.
$ oadm policy add-role-to-user
<user_name>
Removendo a função de um usuário.
$ oadm policy remove-role-from-user
<user_name>
Adicionando uma função de cluster a um usuário.
$ oadm policy add-cluster-role-to-user
<user_name>
Removendo uma função de cluster de um usuário.
$ oadm policy remove-cluster-role-from-user
<user_name>
Adicionando uma função a um grupo.
$ oadm policy add-role-to-user
<user_name>
Removendo uma função de um grupo.
$ oadm policy remove-cluster-role-from-user
<user_name>
Adicionando uma função de cluster a um grupo.
$ oadm policy add-cluster-role-to-group
<groupname>
Removendo uma função de cluster de um grupo.
$ oadm policy remove-cluster-role-from-group <role> <groupname>
Usuário para administração de cluster
Esta é uma das funções mais poderosas em que o usuário tem a capacidade de gerenciar um cluster completo, desde a criação até a exclusão de um cluster.
$ oadm policy add-role-to-user admin <user_name> -n <project_name>
Usuário com poder máximo
$ oadm policy add-cluster-role-to-user cluster-admin <user_name>