OpenShift - Administrasi

Dalam bab ini, kami akan membahas topik-topik seperti cara mengelola node, mengkonfigurasi akun layanan, dll.

Konfigurasi Master dan Node

Di OpenShift, kita perlu menggunakan perintah start bersama dengan OC untuk mem-boot server baru. Saat meluncurkan master baru, kita perlu menggunakan master bersama dengan perintah start, sedangkan saat memulai node baru kita perlu menggunakan node bersama dengan perintah start. Untuk melakukan ini, kita perlu membuat file konfigurasi untuk master serta untuk node. Kita dapat membuat file konfigurasi dasar untuk master dan node menggunakan perintah berikut.

Untuk file konfigurasi master

$ openshift start master --write-config = /openshift.local.config/master

Untuk file konfigurasi node

$ oadm create-node-config --node-dir = /openshift.local.config/node-<node_hostname> --node = <node_hostname> --hostnames = <hostname>,<ip_address>

Setelah kita menjalankan perintah berikut, kita akan mendapatkan file konfigurasi dasar yang dapat digunakan sebagai titik awal konfigurasi. Nanti, kita dapat memiliki file yang sama untuk mem-boot server baru.

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

File konfigurasi node

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

Seperti inilah tampilan file konfigurasi node. Setelah kami memiliki file konfigurasi ini, kami dapat menjalankan perintah berikut untuk membuat server master dan node.

$ openshift start --master-config = /openshift.local.config/master/master-
config.yaml --node-config = /openshift.local.config/node-<node_hostname>/node-
config.yaml

Mengelola Node

Di OpenShift, kami memiliki utilitas baris perintah OC yang sebagian besar digunakan untuk menjalankan semua operasi di OpenShift. Kita dapat menggunakan perintah berikut untuk mengelola node.

Untuk membuat daftar node

$ 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

Menjelaskan detail tentang sebuah node

$ oc describe node <node name>

Menghapus node

$ oc delete node <node name>

Membuat daftar pod pada sebuah node

$ oadm manage-node <node1> <node2> --list-pods [--pod-selector=<pod_selector>] [-o json|yaml]

Mengevaluasi pod pada sebuah node

$ oadm manage-node <node1> <node2> --evacuate --dry-run [--pod-selector=<pod_selector>]

Otentikasi Konfigurasi

Di master OpenShift, ada server OAuth bawaan, yang dapat digunakan untuk mengelola autentikasi. Semua pengguna OpenShift mendapatkan token dari server ini, yang membantu mereka berkomunikasi dengan OpenShift API.

Ada berbagai jenis tingkat otentikasi di OpenShift, yang dapat dikonfigurasi bersama dengan file konfigurasi utama.

  • Perbolehkan semua
  • Tolak semua
  • HTPasswd
  • LDAP
  • Otentikasi dasar
  • Minta tajuk

Saat menentukan konfigurasi master, kita dapat menentukan kebijakan identifikasi di mana kita dapat menentukan jenis kebijakan yang ingin kita gunakan.

Perbolehkan semua

Perbolehkan semua

oauthConfig:
   ...
   identityProviders:
   - name: Allow_Authontication
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: AllowAllPasswordIdentityProvider

Tolak Semua

Ini akan menolak akses ke semua nama pengguna dan kata sandi.

oauthConfig:
   ...
   identityProviders:
   - name: deny_Authontication
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: DenyAllPasswordIdentityProvider

HTPasswd

HTPasswd digunakan untuk memvalidasi nama pengguna dan kata sandi terhadap kata sandi file terenkripsi.

Untuk menghasilkan file terenkripsi, berikut adalah perintahnya.

$ htpasswd </path/to/users.htpasswd> <user_name>

Menggunakan file terenkripsi.

oauthConfig:
   ...
   identityProviders:
   - name: htpasswd_authontication
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: HTPasswdPasswordIdentityProvider
         file: /path/to/users.htpasswd

Penyedia Identitas LDAP

Ini digunakan untuk otentikasi LDAP dimana server LDAP memainkan peran kunci dalam otentikasi.

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"

Otentikasi Dasar

Ini digunakan ketika validasi nama pengguna dan kata sandi dilakukan terhadap otentikasi server-ke-server. Otentikasi dilindungi di URL dasar dan disajikan dalam format 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

Mengonfigurasi Akun Layanan

Akun layanan menyediakan cara yang fleksibel untuk mengakses OpenShift API yang memperlihatkan nama pengguna dan kata sandi untuk otentikasi.

Mengaktifkan Akun Layanan

Akun layanan menggunakan pasangan kunci dari kunci publik dan privat untuk otentikasi. Otentikasi ke API dilakukan menggunakan kunci privat dan memvalidasinya dengan kunci publik.

ServiceAccountConfig:
   ...
   masterCA: ca.crt
   privateKeyFile: serviceaccounts.private.key
   publicKeyFiles:
   - serviceaccounts.public.key
   - ...

Membuat Akun Layanan

Gunakan perintah berikut untuk membuat akun layanan

$ Openshift cli create service account <name of server account>

Bekerja dengan HTTP Proxy

Di sebagian besar lingkungan produksi, akses langsung ke Internet dibatasi. Mereka tidak diekspos ke Internet atau diekspos melalui proxy HTTP atau HTTPS. Di lingkungan OpenShift, definisi mesin proxy ini disetel sebagai variabel lingkungan.

Ini dapat dilakukan dengan menambahkan definisi proxy pada file master dan node yang terletak di bawah /etc/sysconfig. Ini serupa seperti yang kami lakukan untuk aplikasi lain.

Mesin Master

/ 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

Mesin Node

/ 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

Setelah selesai, kita perlu me-restart mesin master dan node.

Untuk 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

Untuk membuat pod berjalan di lingkungan proxy, itu dapat dilakukan dengan menggunakan -

containers:
- env:
   - name: "HTTP_PROXY"
      value: "http://USER:PASSWORD@:10.0.1.1:8080"

Perintah lingkungan OC dapat digunakan untuk memperbarui env yang ada.

OpenShift Storage dengan NFS

Di OpenShift, konsep volume persisten dan klaim volume persisten membentuk penyimpanan persisten. Ini adalah salah satu konsep kunci di mana volume persisten pertama dibuat dan kemudian volume yang sama diklaim. Untuk ini, kami perlu memiliki kapasitas dan ruang disk yang cukup pada perangkat keras yang mendasarinya.

apiVersion: v1
kind: PersistentVolume
metadata:
   name: storage-unit1
spec:
   capacity:
      storage: 10Gi
   accessModes:
   - ReadWriteOnce
   nfs:
      path: /opt
      server: 10.12.2.2
   persistentVolumeReclaimPolicy: Recycle

Selanjutnya, menggunakan perintah OC create buat Persistent Volume.

$ oc create -f storage-unit1.yaml

persistentvolume " storage-unit1 " created

Mengklaim volume yang dibuat.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
   name: Storage-clame1
spec:
   accessModes:
      - ReadWriteOnce
   resources:
      requests:
         storage: 5Gi

Buat klaim.

$ oc create -f Storage-claim1.yaml
persistentvolume " Storage-clame1 " created

Manajemen Pengguna dan Peran

Administrasi pengguna dan peran digunakan untuk mengelola pengguna, akses dan kontrol mereka pada proyek yang berbeda.

Membuat Pengguna

Template yang telah ditentukan sebelumnya dapat digunakan untuk membuat pengguna baru di 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}"

Gunakan oc create –f <nama file> untuk membuat pengguna.

$ oc create –f vipin.yaml

Gunakan perintah berikut untuk menghapus pengguna di OpenShift.

$ oc delete user <user name>

Membatasi Akses Pengguna

ResourceQuotas dan LimitRanges digunakan untuk membatasi tingkat akses pengguna. Mereka digunakan untuk membatasi pod dan container di cluster.

apiVersion: v1
kind: ResourceQuota
metadata:
   name: resources-utilization
spec:
   hard:
      pods: "10"

Membuat kutipan menggunakan konfigurasi di atas

$ oc create -f resource-quota.yaml –n –Openshift-sample

Menjelaskan kutipan sumber daya

$ oc describe quota resource-quota  -n  Openshift-sample
Name:              resource-quota
Namespace:                              Openshift-sample
Resource           Used                  Hard
--------           ----                  ----
pods                3                    10

Menentukan batas penampung dapat digunakan untuk membatasi sumber daya yang akan digunakan oleh penampung yang diterapkan. Mereka digunakan untuk menentukan batasan maksimum dan minimum objek tertentu.

Batasan proyek pengguna

Ini pada dasarnya digunakan untuk sejumlah proyek yang dapat dimiliki pengguna kapan saja. Mereka pada dasarnya dilakukan dengan menentukan level pengguna dalam kategori perunggu, perak, dan emas.

Pertama-tama kita perlu menentukan objek yang memiliki nilai berapa banyak proyek yang dapat dimiliki oleh kategori perunggu, perak, dan emas. Ini perlu dilakukan di file 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

Mulai ulang server master.

Menugaskan pengguna ke tingkat tertentu.

$ oc label user vipin level = gold

Memindahkan pengguna keluar dari label, jika perlu.

$ oc label user <user_name> level-

Menambahkan peran ke pengguna.

$ oadm policy add-role-to-user  <user_name>

Menghapus peran dari pengguna.

$ oadm policy remove-role-from-user  <user_name>

Menambahkan peran cluster ke pengguna.

$ oadm policy add-cluster-role-to-user  <user_name>

Menghapus peran cluster dari pengguna.

$ oadm policy remove-cluster-role-from-user  <user_name>

Menambahkan peran ke grup.

$ oadm policy add-role-to-user  <user_name>

Menghapus peran dari grup.

$ oadm policy remove-cluster-role-from-user  <user_name>

Menambahkan peran cluster ke grup.

$ oadm policy add-cluster-role-to-group  <groupname>

Menghapus peran cluster dari grup.

$ oadm policy remove-cluster-role-from-group <role> <groupname>

Pengguna untuk administrasi cluster

Ini adalah salah satu peran paling kuat di mana pengguna memiliki kemampuan untuk mengelola cluster lengkap mulai dari pembuatan hingga penghapusan cluster.

$ oadm policy add-role-to-user admin <user_name> -n <project_name>

Pengguna dengan kekuatan tertinggi

$ oadm policy add-cluster-role-to-user cluster-admin <user_name>