1. Openshift 오픈시프트 오리진(OpenShift Origin)
은 오픈시프트 온라인, 오픈시프트 데디케이티드, 오픈시프트 컨테이너 플랫폼에 사용되는 업스트림 커뮤니티 프로젝트이다. 도커 컨테이너 패키징 코어와 쿠버네티스 컨테이너 클러스터 관리 기능을 기반에 두고 개발된 오리진은 애플리케이션 수명 관리 기능과 데브옵스 도구를 통해 증강된다. 오리진은 오픈 소스 애플리케이션 컨테이너 플랫폼을 제공한다. 오리진 프로젝트의 모든 소스 코드는 깃허브에서 아파치 라이선스 (버전 2.0)을 통해 이용이 가능하다.[4]
오픈시프트 온라인(OpenShift Online)
은 레드햇의 퍼블릭 클라우드 애플리케이션 개발 및 호스팅 서비스이다. 온라인은 오리진 프로젝트 소스 코드의 버전 2를 제공하였으며, 아파치 라이선스 버전 2.0 하에서 이용이 가능하다.[5] 온라인은 리소스 할당 기어(gear) 하에서 구동되는 미리 빌드된 카트리지를 통해 다양한 언어, 프레임워크 데이터베이스를 지원한다. 개발자들은 오픈시프트 카트리지 API를 통해 다른 언어, 데이터베이스, 구성 요소를 추가할 수 있다.[6] 오픈시프트 3의 선호로 사용이 권장되지 않는다(deprecated).
오픈시프트 데디케이티드(OpenShift Dedicated)
는 레드햇의 매니지드 프라이빗 클러스터 기능으로, 도커가 제공하는 애플리케이션 컨테이너의 코어를 기반으로 빌드되며 레드햇 엔터프라이즈 리눅스의 토대 위에 쿠버네티스가 제공하는 오케스트레이션 및 관리가 포함되어 있다. 아마존 웹 서비스(AWS)와 구글 클라우드 플랫폼(GCP) 마켓플레이스를 통해 이용이 가능하다.
오픈시프트 컨테이너 플랫폼(OpenShift Container Platform)
은 레드햇의 사내(on-premises) 프라이빗 PaaS 제품으로, 도커가 제공하는 애플리케이션 컨테이너의 코어를 기반으로 빌드되며 레드햇 엔터프라이즈 리눅스의 토대 위에 쿠버네티스가 제공하는 오케스트레이션 및 관리가 포함되어 있다.
참고문헌 Openshift
2. 사전구성
2.1. DNS 구성
Common
Component Name
Cluster Name
BaseDomain
A Record
api
openshift
vcf.local
10.253.107.254
api-int
openshift
vcf.local
10.253.107.254
*
apps
openshift
vcf.local
10.253.107.10
console-openshift-console
apps
openshift
vcf.local
10.253.107.10
*
apps
openshift
vcf.local
10.253.107.10
bootstrap
openshift
vcf.local
10.253.107.10
master0
openshift
vcf.local
10.253.107.11
master1
openshift
vcf.local
10.253.107.12
master2
openshift
vcf.local
10.253.107.13
worker1
openshift
vcf.local
10.253.107.14
worker2
openshift
vcf.local
10.253.107.15
worker3
openshift
vcf.local
10.253.107.16
DNS 구성
2.2. DHCP 구성 DHCP 구성 - NSXT로 구성을 하였다.
DHCP 구성#1
DHCP 구성#2
DHCP 구성#3
3. 파일 다운로드 OC를 다운로드 하기 위해 redhat에 가입 하고 Login 필요
OC 다운로드 링크 OC 다운로드 링크
OC 다운로드#1
PullSecret을 저장해 둔다.
OC 다운로드#2
압축을 해제 하고 환경변수를 별도로 구성하지 않게 /usr/local/bin 에다가 copy를 한다.
1
2
3
4
5
6
7
8
9
tar -xzvf openshift-client-linux.tar.gz
tar -xzvf openshift-install-linux.tar.gz
mv oc kubectl openshift-install /usr/local/bin
oc version
openshift-install version
sshkeygen을 생성 한다.
1
2
3
4
5
ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_rsa
eval " $( ssh-agent -s) "
ssh-add ~/.ssh/id_rsa
4. vCenter SSH thumbprint 얻기
1
2
3
4
5
openssl s_client -servername vcsa01.vcf.local -connect vcsa01.vcf.local:443 | openssl x509 | tee ca.crt
cp ca.crt /usr/local/share/ca-certificates/
update-ca-certificates
5. Temp Image RHCOS Download Link
1
wget https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/latest/latest/rhcos-vmware.x86_64.ova
또는 아래와 같이 GUI에서 다운로드 받을 수 있다.
RHCOS OVA GUI 다운로드#2
RHCOS OVA GUI 다운로드#2
RHCOS OVA GUI 다운로드#3
RHCOS OVA GUI 다운로드#4
5.1. Temp 구성
vSphere Temp Upload#1
vSphere Temp Upload#2
vSphere Temp Upload#3
vSphere Temp Upload#4
vSphere Temp Upload#5
vSphere Temp Upload#6
vSphere Temp Upload#7
vSphere Temp Upload#8
6. OC Install
SSL 구성
install-config.yaml 참조
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
apiVersion: v1
baseDomain: vcf.local
compute:
- architecture: amd64
hyperthreading: Enabled
name: worker
platform: {}
replicas: 3
controlPlane:
architecture: amd64
hyperthreading: Enabled
name: master
platform: {}
replicas: 3
metadata:
creationTimestamp: null
name: ocp
networking:
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
machineNetwork:
- cidr: 10.0.0.0/16
networkType: OpenShiftSDN
serviceNetwork:
- 172.30.0.0/16
platform:
vsphere:
apiVIP: 10.253.107.254
cluster: OBCLUSTER
datacenter: OBDC
defaultDatastore: vsanDatastore
ingressVIP: 10.253.107.253
network: LS-MGMT-10.253.107.x
password: Openbase!234
username: administrator@vsphere.local
vCenter: vcsa01.vcf.local
fips: false
publish: External
pullSecret: 'full secret 넣어줘야함'
sshKey: |
ssh-ed25519 AAAAC
ocp 실행
1
2
3
mkdir ocp
cp install-config.yaml ocp
openshift-install create install-config --dir= ocp
Manifest 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
openshift-install create manifests --dir ocp
cd ~/ocp/openshift
rm -rf 99_openshift-cluster-api_master-*
rm -rf 99_openshift-cluster-api_worker-machineset-0.yaml
cd ~/ocp/manifests/
vi cluster-scheduler-02-config.yml
apiVersion: config.openshift.io/v1
kind: Scheduler
metadata:
creationTimestamp: null
name: cluster
spec:
mastersSchedulable: false ### true > false change
policy:
name: ""
status: {}
ignition 실행
1
openshift-install create ignition-configs --dir ocp
L4 VIP로 설정 필요
1
2
3
4
5
6
7
8
9
10
11
12
13
14
cat << EOF | tee append-bootstrap.ign
{
"ignition": {
"config": {
"merge": [
{
"source": "http://10.253.107.254:8080/bootstrap.ign" ## L4 VIP로 변경
}
]
},
"version": "3.1.0"
}
}
EOF
BASE64 실행
1
2
3
base64 -w0 append-bootstrap.ign > append-bootstrap.64
base64 -w0 master.ign > master.64
base64 -w0 worker.ign > worker.64
웹 구성에서 파일을 다운로드 할 수 있게 file 폴더 구성 후 ign을 복사 한다.
1
2
3
mkdir -p /usr/share/nginx/html/files
cp *.ign /usr/share/nginx/html/files/
chmod 644 /usr/share/nginx/html/files/*.ign
7. NGINX NGINX 설치
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
apt update && apt upgrade -y
make로 설치
apt install gcc libpcre3 libpcre3-dev libssl-dev make -y
mkdir -p /var/tmp/src && cd /var/tmp/src
wget http://nginx.org/download/nginx-1.20.2.tar.gz
tar -xzf nginx-1.20.2.tar.gz
cd nginx-1.20.2
./configure --prefix= /var/www/html --sbin-path= /usr/sbin/nginx --conf-path= /etc/nginx/nginx.conf --http-log-path= /var/log/nginx/access.log --error-log-path= /var/log/nginx/error.log --with-pcre --lock-path= /var/lock/nginx.lock --pid-path= /var/run/nginx.pid --with-http_ssl_module --with-http_image_filter_module= dynamic --modules-path= /etc/nginx/modules --with-http_v2_module --with-stream= dynamic --with-http_addition_module --with-http_mp4_module --with-stream
make
make install
vi /lib/systemd/system/nginx.service
[ Unit]
Description = The NGINX HTTP and reverse proxy server
After = syslog.target network-online.target remote-fs.target nss-lookup.target
Wants = network-online.target
[ Service]
Type = forking
PIDFile = /var/run/nginx.pid
ExecStartPre = /usr/sbin/nginx -t
ExecStart = /usr/sbin/nginx
ExecReload = /usr/sbin/nginx -s reload
ExecStop = /bin/kill -s QUIT $MAINPID
PrivateTmp = true
[ Install]
WantedBy = multi-user.target
nginx.conf 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
## 아래 내용 추가
vi etc/nginx/nginx.conf
worker_processes auto; ## 추가
error_log /var/log/nginx/error.log; ## 추가
pid /run/nginx.pid; ## 추가
include /etc/nginx/stream.conf.d/*.conf; ## 추가
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"' ;
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8081;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
include /etc/nginx/conf.d/*.conf; ## 추가
}
웹 구성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cat << EOF | tee /etc/nginx/conf.d/openshift.conf
server {
listen 8080;
server_name localhost;
location / {
root /usr/share/nginx/html/files;
autoindex on;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
EOF
nginx 테스트 및 실행
1
2
3
nginx -t
systemctl restart nginx
systemctl enable nginx
NGINX 확인
8. Temp 이미지로 VM 구성 Temp를 활용하여 bootstrap , master 3개 , worker 3개를 배포한다.
Image 구성#1
Image 구성#2
Image 구성#3
base64로 변경한 값을 여기서 넣어 준다.
bootstrap : cat append-bootstrap.64 , 마스터 : cat master.64 , Worker : cat worker.64 의 값을 넣어 주면 됨
Image 구성#4
9. L4 구성 L4장비가 없을 경우 / L4장비가 있을 경우를 생각해서 NGINX도 포함 시킴
9.1. NSXT L4 구성
1
2
3
4
5
6
7
8
9
## 설명
ocp_8080 : jumphost ( nginx에서 파일을 땡기기 위해 구성)
## 배포 완료 후 bootstrap은 삭제 해도 됨
ocp-master-and-boot-machine-22623 : bootstrap 및 master
ocp_master-and-boot-api-6443: bootstrap 및 master
## Openshift는 Route를사용 하기 때문에 설정
ocp_443, ocp_80 : master 및 worker
L4 구성#1
L4 구성#2
9.2. NGINX L4 구성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
## LB 설정
cat << EOF | tee /etc/nginx/stream.conf.d/lb.conf
stream{
upstream ocp_k8s_api {
#round-robin;
server 10.253.107.10:6443; #bootstrap
server 10.253.107.11:6443; #master1
server 10.253.107.12:6443; #master2
server 10.253.107.13:6443; #master3
}
server {
listen 6443;
proxy_pass ocp_k8s_api;
}
upstream ocp_m_config {
#round-robin;
server 10.253.107.10:22623; #bootstrap
server 10.253.107.11:22623; #master1
server 10.253.107.12:22623; #master2
server 10.253.107.13:22623; #master3
}
server {
listen 22623;
proxy_pass ocp_m_config;
}
upstream ocp_http {
#round-robin;
server 10.253.107.11:80; #master1
server 10.253.107.12:80; #master2
server 10.253.107.13:80; #master3
server 10.253.107.14:80; #worker1
server 10.253.107.15:80; #worker2
server 10.253.107.16:80; #worker3
}
server{
listen 80;
proxy_pass ocp_http;
}
upstream ocp_https {
#round-robin;
server 10.253.107.11:443; #master1
server 10.253.107.12:443; #master2
server 10.253.107.13:443; #master3
server 10.253.107.14:443; #worker1
server 10.253.107.15:443; #worker2
server 10.253.107.16:443; #worker3
}
server{
listen 443;
proxy_pass ocp_https;
}
}
EOF
## nginx restart
nginx -t
systemctl restart nginx
10. 완료 후 확인
1
2
3
4
5
6
7
8
export KUBECONFIG = <installation_directory>/auth/kubeconfig
예시
export KUBECONFIG = ~/ocp/auth/kubeconfig
oc whoami
oc get clusterversion
완료#1
1
2
3
4
5
oc get clusteroperators
oc describe clusterversion
oc get clusterversion -o jsonpath='{.items[0].spec}{"\n"}'
완료#2
완료#3
11. New Worker Node Add
1
2
3
4
5
6
## PENDING 확인
kubectl get csr
## PENDING 확인 후 적용
oc adm certificate approve csr-bghmp csr-hd9x8 csr-hlngb
oc adm certificate approve csr-gpgv9 csr-n6lqm csr-zfws6
worker Node 추가
12. 계정 Local 또는 AD을 통해 계정을 관리 할 수 있다.
12.1. Local 계정 생성 아래는 htpasswd를 사용 하는 방법의 대해서 구성 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
## 우분투
apt install apache2-utils -y
# 유저 정보
# htpasswd -Bbc htpasswd {username} '{password}'
$ htpasswd -Bbc htpasswd my1208 'Passw0rd'
cat htpasswd
oc --user= admin create secret generic htpasswd \
--from-file= htpasswd -n openshift-config
oc get secret -n openshift-config
유저 추가
secret 확인
secret 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
cat << EOF | tee oauth-config.yaml
# oauth-config.yaml
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
name: cluster
spec:
identityProviders:
- name: Local Password
mappingMethod: claim
type: HTPasswd
htpasswd:
fileData:
name: htpasswd
EOF
oc replace -f oauth-config.yaml
## shows current user
oc whoami
## shows cluster web console URL
oc whoami --show-console
## shows cluster API URL
oc whoami --show-server
## shows current OAuth token
oc whoami --show-token
GUI 접속#1
GUI 접속#2
12.2. AD 연동 LDPAS를 구성하기 위한 configmap 생성
1
oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config
만약 LDAPS로 구성을 하지 않았으면 insecure: true, ca 항목을 삭제, url을 ldap으로 변경을 해주면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
oc apply -n openshift-config -f - << EOF
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
name: cluster
spec:
identityProviders:
- name: ldapidp
mappingMethod: claim
type: LDAP
ldap:
attributes:
id:
- dn
email:
- mail
name:
- sAMAccountName
preferredUsername:
- sAMAccountName
bindDN: cn=administrator,cn=users,dc=tkg,dc=io
bindPassword:
name: ldap-secret
ca:
name: ca-config-map
insecure: false
url: "ldaps://tanzu-dns.tkg.io/ou=tanzu,dc=tkg,dc=io?sAMAccountName"
EOF
GUI 접속
12.3. 수동 GROUP-SYNC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
vi ldapsync.yaml
# LDAP is case insensitive, but OpenShift is not, so all LDAP parameters have been converted to lower case as per https://access.redhat.com/solutions/3232051 (under "Case Sensitivity")
kind: LDAPSyncConfig
apiVersion: v1
url: ldaps://tanzu-dns.tkg.io:636
insecure: false
ca: "/data/cert/ldapserver.pem" ### ldaps 인증서의 실제 위치 / 파일
bindDN: cn = administrator,cn= users,dc= tkg,dc= io
bindPassword: "Password"
rfc2307:
groupsQuery:
baseDN: "ou=tanzu,dc=tkg,dc=io"
scope: sub
filter: ( objectClass = group)
derefAliases: never
timeout: 0
pageSize: 0
groupUIDAttribute: dn
groupNameAttributes: [ cn ]
groupMembershipAttributes: [ member ]
usersQuery:
basedn: "ou=tanzu,dc=tkg,dc=io"
scope: sub
derefAliases: never
pageSize: 0
userUIDAttribute: dn
userNameAttributes: [ cn ]
tolerateMemberNotFoundErrors: true
tolerateMemberOutOfScopeErrors: true
## 적용전 제대로 받아오는지 확인을 한다.
oc adm groups sync --sync-config= ldapsync.yaml
## 확인이 끝나면 적용한다.
oc adm groups sync --sync-config= ldapsync.yaml --confirm
## 권한 설정
oc adm policy add-cluster-role-to-group cluster-admin tkg
## 권한 삭제
oc adm policy remove-cluster-role-from-group cluster-admin tkg
GROUP 확인 및 적용
12.4 CronJob Group-Sync 위에서 LDAP을 연동 하였다면 cm , secret 이 생성 된 것을 확인 할 수 있다.
1
2
3
4
5
6
7
## password 이름 확인
password = ` oc get secret -n openshift-authentication | grep v4-0-config-user-idp-0 | awk '{print $1}' `
oc get secret -n openshift-authentication $password -o jsonpath ={ .data}
## 인증서 이름 확인
ca = ` oc get cm -n openshift-authentication | grep v4-0-config-user | awk '{print $1}' `
oc get cm -n openshift-authentication $ca -o jsonpath ={ .items[ 0] .data} | awk '{print $1}'
그리고 계정 및 권한 설정을 해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
cat << EOF | tee ldap-sync-sa-clusterrole.yaml
kind: ServiceAccount
apiVersion: v1
metadata:
name: ldap-group-syncer
namespace: openshift-authentication
labels:
app: cronjob-ldap-group-sync
---
kind: ServiceAccount
apiVersion: v1
metadata:
name: ldap-group-syncer
namespace: openshift-authentication
labels:
app: cronjob-ldap-group-sync
root@ubuntu:/var/tmp/oc/ldaps#
root@ubuntu:/var/tmp/oc/ldaps# cat clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ldap-group-syncer
labels:
app: cronjob-ldap-group-sync
rules:
- apiGroups:
- ''
- user.openshift.io
resources:
- groups
verbs:
- get
- list
- create
- update
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: ldap-group-syncer
labels:
app: cronjob-ldap-group-sync
subjects:
- kind: ServiceAccount
name: ldap-group-syncer
namespace: openshift-authentication
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: ldap-group-syncer
EOF
LDAP의 자동 Sync를 구성하기 위해 config-map 및 job 설정
witelist / balcklist의 경우 ldapsearch에서 distinguishedName: CN=test test,OU=tanzu,DC=tkg,DC=io 이부분의 이름으로 넣어야함. , 만약 별도로 witelist / blacklist가 필요 없으면 제거 해도 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
cat << EOF | tee ldap-sync-cm-cron.yaml
kind: ConfigMap
apiVersion: v1
metadata:
name: ldap-group-syncer
namespace: openshift-authentication
labels:
app: cronjob-ldap-group-sync
data:
ldap-group-sync.yaml: |
kind: LDAPSyncConfig
apiVersion: v1
url: ldaps://tanzu-dns.tkg.io
bindDN: cn=administrator,cn=users,dc=tkg,dc=io
bindPassword:
file: "/etc/secrets/bindPassword" ## 위에서 설명한 secret, cronjob에서 voluemount 후 적용
insecure: false
ca: "/ldap-sync/ca/ca.crt" ## 위에서 설명한 configmap, cronjob에서 voluemount 후 적용
rfc2307:
groupsQuery:
baseDN: "ou=tanzu,dc=tkg,dc=io"
scope: sub
derefAliases: never
filter: (objectclass=group)
groupUIDAttribute: dn
groupNameAttributes: [ cn ]
groupMembershipAttributes: [ member ]
usersQuery:
baseDN: "ou=tanzu,dc=tkg,dc=io"
scope: sub
derefAliases: never
pageSize: 0
userUIDAttribute: dn
userNameAttributes: [ sAMAccountName ]
tolerateMemberNotFoundErrors: true
tolerateMemberOutOfScopeErrors: true
---
kind: ConfigMap
apiVersion: v1
metadata:
name: ldap-group-syncer-whitelist
namespace: openshift-authentication
labels:
app: cronjob-ldap-group-sync
data:
whitelist.txt: |
CN=kim dokyung,OU=tanzu,DC=tkg,DC=io
---
kind: ConfigMap
apiVersion: v1
metadata:
name: ldap-group-syncer-blacklist
namespace: openshift-authentication
labels:
app: cronjob-ldap-group-sync
data:
blacklist.txt: |
CN=tkg,OU=tanzu,DC=tkg,DC=io
---
kind: CronJob
apiVersion: batch/v1beta1
metadata:
name: ldap-group-syncer
namespace: openshift-authentication
labels:
app: cronjob-ldap-group-sync
spec:
schedule: "*/1 * * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 5
failedJobsHistoryLimit: 5
jobTemplate:
metadata:
labels:
app: cronjob-ldap-group-sync
spec:
backoffLimit: 0
template:
metadata:
labels:
app: cronjob-ldap-group-sync
spec:
containers:
- name: ldap-group-sync
image: "registry.redhat.io/openshift4/ose-cli:v4.7"
command:
- "/bin/bash"
- "-c"
- oc adm groups sync --whitelist=/etc/whitelist/whitelist.txt --blacklist=/etc/blacklist/blacklist.txt --sync-config=/etc/config/ldap-group-sync.yaml --confirm
volumeMounts:
- mountPath: "/etc/blacklist"
name: "ldap-sync-volume-blacklist"
- mountPath: "/etc/whitelist"
name: "ldap-sync-volume-whitelist"
- mountPath: "/etc/config"
name: "ldap-sync-volume"
- mountPath: "/etc/secrets"
name: "ldap-bind-password"
- mountPath: "/ldap-sync/ca"
name: "ldap-sync-ca"
volumes:
- name: "ldap-sync-volume-blacklist" ## volumes을 모두 연결하여 assign
configMap:
name: "ldap-group-syncer-blacklist"
- name: "ldap-sync-volume-whitelist" ## volumes을 모두 연결하여 assign
configMap:
name: "ldap-group-syncer-whitelist"
- name: "ldap-sync-volume" ## volumes을 모두 연결하여 assign
configMap:
name: "ldap-group-syncer"
- name: "ldap-sync-ca" ## volumes을 모두 연결하여 assign
configMap:
name: "v4-0-config-user-idp-0-ca"
- name: "ldap-bind-password" ## volumes을 모두 연결하여 assign
secret:
secretName: "v4-0-config-user-idp-0-bind-password"
restartPolicy: "Never"
terminationGracePeriodSeconds: 30
activeDeadlineSeconds: 500
dnsPolicy: "ClusterFirst"
serviceAccountName: "ldap-group-syncer"
serviceAccount: "ldap-group-syncer"
EOF
이후에 자동으로 싱크가 되는 것을 알수 있다. 만약에 그룹을 추가 했는대 그 그룹만 막고 싶으면 blacklist, 또는 기존에 있는 것만 하고 자동 싱크 하고 싶으면 witelist를 적용 하면된다.
흠 생각에는 그냥 witelist 방식으로만 적용하면 될 것으로 보인다. 만약에 필요 하다면 필요 없이 모든 그룹을 자동 싱크 하겠따면 witelist / blaklist는 필요 없다.
자동 싱크가 되었으면 해당하는 그룹에 권한을 준다.
1
2
3
4
5
## 권한 설정
oc adm policy add-cluster-role-to-group cluster-admin tkg
## 권한 삭제
oc adm policy remove-cluster-role-from-group cluster-admin tkg
자동 sync 구성 완료