Skip to content

tmax-cloud/install-hyperauth

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

HyperAuth ์„ค์น˜ ๊ฐ€์ด๋“œ

๊ฐœ์š”

  • Hyperauth
    • OIDC ์™€ SSO ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜๋Š” ์ธ์ฆ์„œ๋ฒ„๋กœ์จ keycloak ์„ ๋ฐ”ํƒ•์œผ๋กœ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•จ

๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ๋ฒ„์ „

  • hyperauth
  • postgres
    • postgres:9.6.2-alpine
  • zookeeper
    • wurstmeister/zookeeper:3.4.6
  • kafka
    • wurstmeister/kafka:2.12-2.0.1

SPEC (21.01.25)

Hyperauth

cpu : 300m memory: 300Mi

DB (Postgresql, tibero)

cpu: 300 memory: 300Mi Storage: 100Gi

Kafka X 3

cpu : 100m memory: 100Mi Storage: 5Gi

Zookeeper

cpu : 100m memory: 100Mi Storage: 5Gi

Prerequisites

  • Java binary
  • jq binary
  • Storage class
    • ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด storage class๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
      • $ kubectl get storageclass
    • ๋งŒ์•ฝ ์•„๋ฌด storage class๊ฐ€ ์—†๋‹ค๋ฉด ์•„๋ž˜ ๋งํฌ๋กœ ์ด๋™ํ•˜์—ฌ rook-ceph ์„ค์น˜ํ•œ๋‹ค.
    • Storage class๋Š” ์žˆ์ง€๋งŒ default๋กœ ์„ค์ •๋œ ๊ฒƒ์ด ์—†๋‹ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
      • $ kubectl patch storageclass csi-cephfs-sc -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    • csi-cephfs-sc๋Š” ์œ„ ๋งํฌ๋กœ rook-ceph๋ฅผ ์„ค์น˜ํ–ˆ์„ ๋•Œ ์ƒ์„ฑ๋˜๋Š” storage class์ด๋ฉฐ ๋‹ค๋ฅธ storage class๋ฅผ default๋กœ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๊ด€ํ•˜๋‹ค.

ํ์‡„๋ง ๊ตฌ์ถ• ๊ฐ€์ด๋“œ

  1. ํ์‡„๋ง์—์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” image repository์— ํ•„์š”ํ•œ ์ด๋ฏธ์ง€๋ฅผ pushํ•œ๋‹ค.

    • ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ ๋ฐ ํ™˜๊ฒฝ ์„ค์ •
    $ mkdir -p ~/hyperauth-install
    
    # For Hyperauth
    $ export HYPERAUTH_HOME=~/hyperauth-install
    $ cd ${HYPERAUTH_HOME}
    $ export POSTGRES_VERSION=9.6.2-alpine
    $ export HYPERAUTH_VERSION=<tag1>
    $ export REGISTRY=<REGISTRY_IP_PORT>
    
    * <tag1>์—๋Š” ์„ค์น˜ํ•  hyperauth ๋ฒ„์ „ ๋ช…์‹œ
    	์˜ˆ์‹œ: $ export HYPERAUTH_VERSION=1.1.1.10
    * <REGISTRY_IP_PORT>์—๋Š” ํ์‡„๋ง Docker Registry IP:PORT๋ช…์‹œ
    	์˜ˆ์‹œ: $ export REGISTRY=192.168.6.110:5000
    • ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋ฐ›๋Š”๋‹ค.
    # postgres
    $ sudo docker pull postgres:${POSTGRES_VERSION}
    $ sudo docker save postgres:${POSTGRES_VERSION} > postgres_${POSTGRES_VERSION}.tar
    
    # hyperauth
    $ sudo docker pull tmaxcloudck/hyperauth:b${HYPERAUTH_VERSION}
    $ sudo docker save tmaxcloudck/hyperauth:b${HYPERAUTH_VERSION} > hyperauth_b${HYPERAUTH_VERSION}.tar
  2. ์œ„์˜ ๊ณผ์ •์—์„œ ์ƒ์„ฑํ•œ tar ํŒŒ์ผ๋“ค์„ ํ์‡„๋ง ํ™˜๊ฒฝ์œผ๋กœ ์ด๋™์‹œํ‚จ ๋’ค ์‚ฌ์šฉํ•˜๋ ค๋Š” registry์— ์ด๋ฏธ์ง€๋ฅผ pushํ•œ๋‹ค.

    • ์ด๋ฏธ์ง€ load ๋ฐ push
    # Load Images
    $ sudo docker load < postgres_${POSTGRES_VERSION}.tar
    $ sudo docker load < hyperauth_b${HYPERAUTH_VERSION}.tar
    
    # Change Image's Tag For Private Registry
    $ sudo docker tag postgres:${POSTGRES_VERSION} ${REGISTRY}/postgres:${POSTGRES_VERSION}
    $ sudo docker tag tmaxcloudck/hyperauth:b${HYPERAUTH_VERSION} ${REGISTRY}/hyperauth:b${HYPERAUTH_VERSION}
    
    # Push Images
    $ sudo docker push ${REGISTRY}/postgres:${POSTGRES_VERSION}
    $ sudo docker push ${REGISTRY}/hyperauth:b${HYPERAUTH_VERSION}

์„ค์น˜ ๊ฐ€์ด๋“œ

  1. ์ดˆ๊ธฐํ™” ์ž‘์—…
  2. SSL ์ธ์ฆ์„œ ์ƒ์„ฑ
  3. HyperAuth Deployment ์ƒ์„ฑ
  4. Kafka Topic Server ์„ค์น˜
  5. Kubernetes OIDC ์—ฐ๋™

์ถ”๊ฐ€1. [External-OIDC-Provider ์—ฐ๋™]

Step 1. ์ดˆ๊ธฐํ™” ์ž‘์—… ๋ฐ yaml ์ˆ˜์ •

  • ๋ชฉ์  : HyperAuth ๊ตฌ์ถ•์„ ์œ„ํ•œ ์ดˆ๊ธฐํ™” ์ž‘์—…, Secret์ƒ์„ฑ ๋ฐ DB ๊ตฌ์ถ•, Yaml ๋ฒ„์ „ ์ˆ˜์ •
  • ์•„๋ž˜์˜ command๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” image ๋ฒ„์ „ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
    $ export POSTGRES_VERSION=9.6.2-alpine
    $ sed -i 's/POSTGRES_VERSION/'${POSTGRES_VERSION}'/g' 1.initialization.yaml
    $ export HYPERAUTH_VERSION=b1.1.1.10
    $ sed -i 's/HYPERAUTH_VERSION/'${HYPERAUTH_VERSION}'/g' 2.hyperauth_deployment.yaml
  • ์ƒ์„ฑ ์ˆœ์„œ :
    • kakfa namespace์— strimzi-cluster-operator๊ฐ€ ๊น”๋ ค์žˆ์ง€ ์•Š์œผ๋ฉด, strimzi-cluster-operator.yaml ์‹คํ–‰ ex) kubectl apply -f strimzi-cluster-operator.yaml)
    • 1.initialization.yaml ์‹คํ–‰ ex) kubectl apply -f 1.initialization.yaml)
  • ๋น„๊ณ  : ์•„๋ž˜ ๋ช…๋ น์–ด ์ˆ˜ํ–‰ ํ›„, Postgre Admin ์ ‘์† ํ™•์ธ
    $ kubectl exec -it $(kubectl get pods -n hyperauth | grep postgre | cut -d ' ' -f1) -n hyperauth -- bash
    $ psql -U keycloak keycloak

Step 2. SSL ์ธ์ฆ์„œ ์ƒ์„ฑ

  • ๋ชฉ์  : HTTPS ์ธ์ฆ์„ ์œ„ํ•œ ์ธ์ฆ์„œ, kafka์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•œ keystore, truststore๋ฅผ ์ƒ์„ฑํ•˜๊ณ  secret์œผ๋กœ ๋ณ€ํ™˜
  • ์ƒ์„ฑ ์ˆœ์„œ :
    • cert-manager๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๊ณ , tmaxcloud-issuer (ClusterIssuer) ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
    • hyperauth_certs.yaml ์˜ ๋ณ€์ˆ˜๋ฅผ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์น˜ํ™˜ํ•œ๋‹ค. ์•ˆ์“ฐ๋Š” ๋ณ€์ˆ˜ ๋ถ€๋ถ„์€ ์ง€์›Œ์ค€๋‹ค.
      • Hyperauth
        • Hyperauth๋ฅผ IP๋กœ ๋…ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ, {HYPERAUTH_EXTERNAL_IP} ์„ธํŒ…, dnsName ๋ถ€๋ถ„ ์ „์ฒด ์‚ญ์ œ
        • Hyperauth๋ฅผ DNS๋กœ ๋…ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ, {HYPERAUTH_EXTERNAL_DNS} ์„ธํŒ…, ipAddresses ๋ถ€๋ถ„ ์ „์ฒด ์‚ญ์ œ
    • hyperauth_certs.yaml ์‹คํ–‰ ex) kubectl apply -f hyperauth_certs.yaml)
    • Hyperauth Namespace์— hyperauth-https-secret, hyperauth-kafka-jks, kafka-jks Secret์ด ์ƒ์„ฑ๋œ๊ฑธ ํ™•์ธํ•œ๋‹ค.
    $ kubectl get secrets -n hyperauth
* hyperauth-https-secret์œผ๋กœ ๋ถ€ํ„ฐ root-ca, hyperauth ์ธ์ฆ์„œ๋ฅผ ์ถ”์ถœํ•ด์„œ kubernetes pki ์— ์œ„์น˜ํ•œ๋‹ค.
    $ kubectl get secret hyperauth-https-secret -n hyperauth -o jsonpath="{['data']['tls\.crt']}" | base64 -d > ./hyperauth.crt
    $ kubectl get secret hyperauth-https-secret -n hyperauth -o jsonpath="{['data']['ca\.crt']}" | base64 -d > ./hypercloud-root-ca.crt
    $ cp ./hyperauth.crt /etc/kubernetes/pki/hyperauth.crt
    $ cp ./hypercloud-root-ca.crt /etc/kubernetes/pki/hypercloud-root-ca.crt
  • ๋น„๊ณ  :
    • Kubernetes Master๊ฐ€ ๋‹ค์ค‘ํ™” ๋œ ๊ฒฝ์šฐ, hypercloud-root-ca.crt, hyperauth.crt๋ฅผ ๊ฐ Master ๋…ธ๋“œ๋“ค์˜ /etc/kubernetes/pki/hypercloud-root-ca.crt, /etc/kubernetes/pki/hyperauth.crt ๋กœ cp

Step 3. HyperAuth Deployment ๋ฐฐํฌ

  • ๋ชฉ์  : HyperAuth ์„ค์น˜
  • ์ƒ์„ฑ ์ˆœ์„œ :
    • 2.hyperauth_deployment.yaml ์‹คํ–‰ ex) kubectl apply -f 2.hyperauth_deployment.yaml
    • HyperAuth Admin Console์— ์ ‘์† ํ™•์ธ
      • kubectl get svc hyperauth -n hyperauth ๋ช…๋ น์–ด๋กœ IP ํ™•์ธ
      • ๊ณ„์ • : admin/admin
  • ๋น„๊ณ  :
    • K8s admin ๊ธฐ๋ณธ ๊ณ„์ • ์ •๋ณด : hc-admin@tmax.co.kr/Tmaxadmin1!
    • HyperAuth User ๋ฉ”๋‰ด์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ, ID๋ฅผ ์œ„ํ•ด์„œ๋Š” clusterrole๋„ ๋ณ€๊ฒฝ ํ•„์š”

Step 4. Kafka Topic Server ์„ค์น˜

  • ๋ชฉ์  : Hyperauth์˜ Event๋ฅผ Subscribe ํ• ์ˆ˜ ์žˆ๋Š” kafka server ์„ค์น˜
  • ์ƒ์„ฑ ์ˆœ์„œ :
  • ๋น„๊ณ  :
    • hyperauth ์ด๋ฏธ์ง€ tmaxcloudck/hyperauth:b1.0.15.31 ์ดํ›„๋ถ€ํ„ฐ ์„ค์น˜ ์ ์šฉํ•  ๊ฒƒ!
    • kafka_client.yaml ๋กœ pub/subํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ
      • kafka_client pod์— ์ ‘์† ํ›„
        • Producer :
        	export PASSWORD=tmax@23
        	export KAFKA_OPTS=" \
        	  -Djavax.net.ssl.trustStore=/opt/kafka/certificates/truststore.jks \
        	  -Djavax.net.ssl.trustStorePassword=$PASSWORD \
        	  -Djavax.net.ssl.trustStoreType=PKCS12"
          	/opt/kafka/bin/kafka-console-producer.sh --broker-list \
        	  kafka-kafka-bootstrap.hyperauth:9092 --topic tmax\
        	  --producer-property 'security.protocol=SSL'
        • Consumer :
        	export PASSWORD=tmax@23
        	export KAFKA_OPTS=" \
        	  -Djavax.net.ssl.trustStore=/opt/kafka/certificates/truststore.jks \
        	  -Djavax.net.ssl.trustStorePassword=$PASSWORD \
        	  -Djavax.net.ssl.trustStoreType=PKCS12"
        	/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server \
        	  kafka-kafka-bootstrap.hyperauth:9092 --topic tmax\
        	  --consumer-property 'security.protocol=SSL' \
        	  --group consumer1

Step 5. Kubernetes OIDC ์—ฐ๋™

  • ๋ชฉ์  : Kubernetes์˜ RBAC ์‹œ์Šคํ…œ๊ณผ HyperAuth ์ธ์ฆ ์—ฐ๋™

  • ์ƒ์„ฑ ์ˆœ์„œ :

    • Kubernetes Cluster Master Node์— ์ ‘์†
    • {HYPERAUTH_SERVICE_IP} = $(kubectl describe service hyperauth -n hyperauth | grep 'LoadBalancer Ingress' | cut -d ' ' -f7)
    • /etc/kubernetes/manifests/kube-apiserver.yaml ์˜ spec.containers[0].command[] ์ ˆ์— ์•„๋ž˜ command๋ฅผ ์ถ”๊ฐ€
    --oidc-issuer-url=https://{HYPERAUTH_SERVICE_IP}/auth/realms/tmax
    --oidc-client-id=hypercloud5
    --oidc-username-claim=preferred_username
    --oidc-username-prefix=-
    --oidc-groups-claim=group
    --oidc-ca-file=/etc/kubernetes/pki/hyperauth.crt
  • ๋น„๊ณ  :

    • ์ž๋™์œผ๋กœ kube-apiserver ๊ฐ€ ์žฌ๊ธฐ๋™ ๋จ

Step 6. Prometheus ์—ฐ๋™ (Optional)

์ถ”๊ฐ€. External-OIDC-Provider ์—ฐ๋™

  • ๋ชฉ์  : Initech์˜ SSO์‹œ์Šคํ…œ์„ External-OIDC-Provider๋ฅผ ํ†ตํ•ด์„œ IDP๋กœ ์‚ฌ์šฉ
  • ์ƒ์„ฑ ์ˆœ์„œ
    • External-OIDC-Provider ์ƒ์„ฑ : External-OIDC_Provider ์„ค์น˜๊ฐ€์ด๋“œ
    • 2.hyperauth_deployment.yaml ์ˆ˜์ •
      1. #Enable ~ if use External-oidc-provider ๋กœ ์ฃผ์„ ์ฒ˜๋ฆฌ๋œ yaml ํ•„๋“œ๋ฅผ ๋ชจ๋‘ ์ฃผ์„ ํ•ด์ œ
      2. External-OIDC-Provider์˜ ๋„๋ฉ”์ธ (SERVER_URL ๋ณ€์ˆ˜)์„ ์•„๋ž˜ ENV๋กœ ๋“ฑ๋ก
         - name : EXTERNAL_OIDC_PROVIDER_AUTH_URL  
           value : https:// {external-oidc-provider.SERVER_URL} /externalauth  
         - name : EXTERNAL_OIDC_PROVIDER_TOKEN_URL  
           value : https:// {external-oidc-provider.SERVER_URL} /token  
         - name : EXTERNAL_OIDC_PROVIDER_PROFILE_URL  
           value : https:// {external-oidc-provider.SERVER_URL} /profile
      3. ์ดํ›„ ๋ณธ ์„ค์น˜๊ฐ€์ด๋“œ๋ฅผ 1. ์ดˆ๊ธฐํ™” ์ž‘์—… ๋ถ€ํ„ฐ ์ง„ํ–‰

์ฐธ๊ณ ์ž๋ฃŒ ( Ingress๋ฅผ ์‚ฌ์šฉํ•ด์„œ hyperauth๋ฅผ ๋…ธ์ถœํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ )

  • hyperauth_traefik_ingress.yaml ์—์„œ host ๋ฐ hosts๋ฅผ ํ™˜๊ฒฝ์— ๋งž๋Š” dns๋กœ ์ˆ˜์ •ํ•˜๊ณ  applyํ•œ๋‹ค.
  • ๋ชจ๋“  ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— ๊ด€ํ•ด์„œ self-signed ์ธ์ฆ์„œ์˜ ๊ฒฝ์šฐ, os์˜ ca store์— ๋“ฑ๋กํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ k8s๊ฐ€ ๊ณต์ธ ์ธ์ฆ์„œ๋กœ ์จ ์‹ ๋ขฐํ•œ๋‹ค.
    • hypercloud-root-ca.crt, hyperauth.crt๋ฅผ /etc/pki/ca-trust/source/anchors/ ๋ฐ‘์— ๋ณต์‚ฌํ•œ๋‹ค. (centOS ๊ธฐ์ค€)
    • update-ca-trust

์‚ญ์ œ ๊ฐ€์ด๋“œ

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 5

Languages