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>