Shinyproxy: Shinyproxy ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๋กค๋ง ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ณ ์•„ ํฌ๋“œ๊ฐ€ ๋ฐœ์ƒํ•จ

์— ๋งŒ๋“  2019๋…„ 08์›” 19์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: openanalytics/shinyproxy

์•ˆ๋…•ํ•˜์„ธ์š”, application.yaml์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๊ณ  ๋กค๋ง ์—…๋ฐ์ดํŠธ๊ฐ€ ์„ ํƒ๋  ๋•Œ(๋ณต์ œ๋ณธ์„ 0์œผ๋กœ ์„ค์ •ํ•œ ๋‹ค์Œ ๋‹ค์‹œ 1๋กœ ์„ค์ •) - ์ฃผ๋กœ ์ƒˆ๋กœ์šด Shinyproxy ์ด๋ฏธ์ง€๋ฅผ ์•„ํ‹ฐํŒฉํŠธ์—์„œ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— - ์ด์ „์— ์žˆ์—ˆ๋˜ ๋ชจ๋“  ํฌ๋“œ ์ด์ „ Shinyproxy์— ์˜ํ•ด ์Šคํ•€์—…๋˜์–ด ์ข€๋น„๋กœ ๋‚จ๊ฒจ์ง‘๋‹ˆ๋‹ค.

์žฌํ˜„ํ•˜๋ ค๋ฉด:

  • kubectl ๋ชจ๋‘ ๊ฐ€์ ธ์˜ค๊ธฐ

์ด๋ฆ„ ์ค€๋น„ ์ƒํƒœ ๋‹ค์‹œ ์‹œ์ž‘ ์—ฐ๋ น
pod/shinyproxy-7f76d48c79-8x9hs 2/2 ์‹คํ–‰ 0 41m

์ด๋ฆ„ ์œ ํ˜• CLUSTER-IP ์™ธ๋ถ€ IP ํฌํŠธ(๋“ค) ๋‚˜์ด
์„œ๋น„์Šค/shinyproxy NodePort 172.30.85.1918080:32094/TCP 40m

์ด๋ฆ„ ์›ํ•˜๋Š” ํ˜„์žฌ ์ตœ์‹  ๊ฐ€๋Šฅ ์—ฐ๋ น
Deployment.apps/shinyproxy 1 1 1 1 41m

์ด๋ฆ„ ํฌ๋ง ํ˜„์žฌ ์ค€๋น„ ์—ฐ๋ น
replicaset.apps/shinyproxy-7f76d48c79 1 1 1 41m

์ด๋ฆ„ ํ˜ธ์ŠคํŠธ/ํฌํŠธ ๊ฒฝ๋กœ ์„œ๋น„์Šค ํฌํŠธ ์ข…๋ฃŒ ์™€์ผ๋“œ์นด๋“œ
route.route.openshift.io/shinyproxy shinyproxy-aap.apps.cpaas.service.test Shinyproxy์—†์Œ

  • ์•ฑ์— ๋กœ๊ทธ์˜จํ•ฉ๋‹ˆ๋‹ค(์ œ ๊ฒฝ์šฐ์—๋Š” LDAP ์ธ์ฆ ๋ฐ /app_direct/๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜์ง์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ƒˆ ํฌ๋“œ๊ฐ€ ํšŒ์ „๋จ)) - ์˜ˆ์ƒ๋Œ€๋กœ

์ด๋ฆ„ ์ค€๋น„ ์ƒํƒœ ๋‹ค์‹œ ์‹œ์ž‘ ์—ฐ๋ น
pod/shinyproxy-7f76d48c79-8x9hs 2/2 ์‹คํ–‰ 0 43m
pod/sp-pod-e7603441-03ba-470b-925a-22cfba1716de 1/1 ์‹คํ–‰ 0 12์ดˆ

์ด๋ฆ„ ์œ ํ˜• CLUSTER-IP ์™ธ๋ถ€ IP ํฌํŠธ(๋“ค) ๋‚˜์ด
์„œ๋น„์Šค/shinyproxy NodePort 172.30.85.1918080:32094/TCP 43m

์ด๋ฆ„ ์›ํ•˜๋Š” ํ˜„์žฌ ์ตœ์‹  ๊ฐ€๋Šฅ ์—ฐ๋ น
Deployment.apps/shinyproxy 1 1 1 1 43m

์ด๋ฆ„ ํฌ๋ง ํ˜„์žฌ ์ค€๋น„ ์—ฐ๋ น
replicaset.apps/shinyproxy-7f76d48c79 1 1 1 43m

์ด๋ฆ„ ํ˜ธ์ŠคํŠธ/ํฌํŠธ ๊ฒฝ๋กœ ์„œ๋น„์Šค ํฌํŠธ ์ข…๋ฃŒ ์™€์ผ๋“œ์นด๋“œ
route.route.openshift.io/shinyproxy shinyproxy-aap.apps.cpaas.service.test Shinyproxy์—†์Œ

  • ์ƒˆ๋กœ์šด Shinyproxy ์ด๋ฏธ์ง€ ๋นŒ๋“œ ํ›„:

kubectl scale --replicas=0 ๋ฐฐํฌ/shinyproxy
Deployment.extensions/shinyproxy ํ™•์žฅ

kubectl scale --replicas=1 ๋ฐฐํฌ/shinyproxy
Deployment.extensions/shinyproxy ํ™•์žฅ

  • ๋ฐ˜์ง์ด๋Š” ํ”„๋ก์‹œ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ์„ ์œ„ํ•ด ์ƒˆ ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„ ์ค€๋น„ ์ƒํƒœ ๋‹ค์‹œ ์‹œ์ž‘ ์—ฐ๋ น
pod/shinyproxy-7f76d48c79-l5fvw 0/2 ContainerCreating 0 4s
pod/sp-pod-e7603441-03ba-470b-925a-22cfba1716de 1/1 ๋Ÿฌ๋‹ 0 1m

์ด๋ฆ„ ์œ ํ˜• CLUSTER-IP ์™ธ๋ถ€ IP ํฌํŠธ(๋“ค) ๋‚˜์ด
์„œ๋น„์Šค/shinyproxy NodePort 172.30.85.1918080:32094/TCP 44m

์ด๋ฆ„ ์›ํ•˜๋Š” ํ˜„์žฌ ์ตœ์‹  ๊ฐ€๋Šฅ ์—ฐ๋ น
Deployment.apps/shinyproxy 1 1 1 0 45m

์ด๋ฆ„ ํฌ๋ง ํ˜„์žฌ ์ค€๋น„ ์—ฐ๋ น
replicaset.apps/shinyproxy-7f76d48c79 1 1 0 45m

์ด๋ฆ„ ํ˜ธ์ŠคํŠธ/ํฌํŠธ ๊ฒฝ๋กœ ์„œ๋น„์Šค ํฌํŠธ ์ข…๋ฃŒ ์™€์ผ๋“œ์นด๋“œ
route.route.openshift.io/shinyproxy shinyproxy-aap.apps.cpaas.service.test Shinyproxy์—†์Œ

  • ์ด ๋‹จ๊ณ„์—์„œ ๋‚ด ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์‘๋‹ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•  ์ผ์€ ํƒญ/์ฐฝ์„ ๋‹ซ๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํฌ๋“œ(R ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ)๋Š” ์ˆ˜๋™์œผ๋กœ ์‚ญ์ œํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ณ„์† ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

  • ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋น„ํ•˜๋Š” ํฌ๋“œ๋Š” ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ๋œ ๋ฐฐํฌ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ƒˆ ์„œ๋น„์Šค ์ง€์ ์ด ์„œ๋น„์Šค๋ฅผ ํ†ตํ•œ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • ๋˜ํ•œ ์–ด๋–ค ํฌ๋“œ๊ฐ€ ์˜ค๋ž˜๋œ ํฌ๋“œ์ธ์ง€ ์‹๋ณ„ํ•˜๊ณ  ์ˆ˜๋™์œผ๋กœ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ๋„ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. Spring Boot ์•ฑ์ด ์˜ฌ๋ฐ”๋ฅด๊ณ  ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ shinyproxy ๋˜๋Š” containerproxy์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” kubctl proxy ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค. Kubernetes์˜ ๊ฒฝ์šฐ containerproxy๊ฐ€ Kubernetes ์ž์ฒด์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ์— ์˜์กดํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒˆ ๋ฐฐํฌ์—์„œ Kubernetes๋Š” ๋ชจ๋“  ์ด์ „ ํฌ๋“œ์˜ ํ”„๋ก์‹œ์™€ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‘์— SIGTERM์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฆ‰์‹œ ์ข…๋ฃŒ๋˜๊ณ  containerproxy๊ฐ€ Kubernetes์™€ ํ†ต์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ๋Œ€๋กœ Kubernetes๊ฐ€ v1.18์—์„œ ์ด๋Ÿฌํ•œ ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/kubernetes/enhancements/issues/753
https://banzaicloud.com/blog/k8s-sidecars/

๊ทธ๋•Œ๊นŒ์ง€๋Š” ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ์— ๋‹ค์Œ ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

          lifecycle:
            preStop:
              exec:
                command: ["sh", "-c", "sleep 5"] # wait 5 seconds to let shinyproxy remove the pods on graceful shutdown

๋ชจ๋“  7 ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” @ramkumarg1

Shinyproxy๊ฐ€ SIGTERM ์‹ ํ˜ธ๋กœ ์ˆ˜์‹ ๋˜๋ฉด(๋ฐฐํฌ๊ฐ€ ์ถ•์†Œ๋  ๋•Œ) ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํฌ๋“œ๋ฅผ ๋จผ์ € ์ค‘์ง€ํ•˜์—ฌ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํฌ๋“œ ์‚ฌ์–‘์—์„œ ์œ ์˜ˆ ๊ธฐ๊ฐ„ terminationGracePeriodSeconds ์„ ๋Š˜๋ ค์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(๊ธฐ๋ณธ๊ฐ’์€ 30์ดˆ). Shinyproxy๊ฐ€ ์ด ๊ธฐ๊ฐ„ ๋‚ด์— ์ข…๋ฃŒํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ SIGKILL์„ ์ˆ˜์‹ ํ•˜๊ณ  ์ฆ‰์‹œ ์ข…๋ฃŒ๋˜์–ด ๊ณ ์•„ ํฌ๋“œ๋ฅผ ๋‚จ๊น๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ •๋ณด: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/

@dseynaev ์—๊ฒŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. TerminationGracePeriodSeconds๋ฅผ ํฌํ•จํ•˜๋„๋ก ๋ฐฐํฌ ์‚ฌ์–‘์„ ๋ณ€๊ฒฝํ–ˆ์ง€๋งŒ ์ฐจ์ด๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ํฌ๋“œ๊ฐ€ ์ฆ‰์‹œ ์ข…๋ฃŒ๋จ - ์•„๋งˆ๋„ ์ด ๋ฌธ์ œ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ SIGTERM์„ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” https://github.com/kubernetes/kubernetes/issues/47576 ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

spec:
  terminationGracePeriodSeconds : 180
  containers:
  - name: shinyproxy

์šฐ๋ฆฌ๋Š” ์ข€๋น„ ํฌ๋“œ์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๊ด€์ฐฐํ–ˆ์œผ๋ฉฐ ์ข…๋ฃŒ ์œ ์˜ˆ ๊ธฐ๊ฐ„ ์„ค์ •์œผ๋กœ๋„ ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์€ ์ข…๋ฃŒ ์‹œ ๋ฐ˜์ง/์ปจํ…Œ์ด๋„ˆ ํ”„๋ก์‹œ์— ์˜ํ•ด ๊ธฐ๋ก๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2020-01-30 10:56:56.785  INFO 1 --- [           main] e.o.c.ContainerProxyApplication          : Started ContainerProxyApplication in 39.115 seconds (JVM running for 43.619)
2020-01-30 10:57:01.374  INFO 1 --- [  XNIO-2 task-1] io.undertow.servlet                      : Initializing Spring FrameworkServlet 'dispatcherServlet'
2020-01-30 10:57:01.375  INFO 1 --- [  XNIO-2 task-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2020-01-30 10:57:01.507  INFO 1 --- [  XNIO-2 task-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 131 ms
2020-01-30 10:57:26.275  INFO 1 --- [ XNIO-2 task-16] e.o.containerproxy.service.UserService   : User logged in [user: **]
2020-01-30 10:57:35.802  INFO 1 --- [  XNIO-2 task-3] e.o.containerproxy.service.ProxyService  : Proxy activated [user: ***] [spec: insight] [id: 9274ad33-665a-4d47-bab5-6c4b39a618b8]
2020-01-30 10:59:02.376  INFO 1 --- [       Thread-2] ConfigServletWebServerApplicationContext : Closing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext<strong i="6">@2b2948e2</strong>: startup date [Thu Jan 30 10:56:24 GMT 2020]; root of context hierarchy
2020-01-30 10:59:02.377 ERROR 1 --- [pool-4-thread-1] java.io.InputStreamReader                : Error while pumping stream.
java.io.EOFException: null
    at okio.RealBufferedSource.require(RealBufferedSource.java:61) ~[okio-1.15.0.jar!/:na]
    at okio.RealBufferedSource.readHexadecimalUnsignedLong(RealBufferedSource.java:303) ~[okio-1.15.0.jar!/:na]
    at okhttp3.internal.http1.Http1Codec$ChunkedSource.readChunkSize(Http1Codec.java:469) ~[okhttp-3.12.0.jar!/:na]
    at okhttp3.internal.http1.Http1Codec$ChunkedSource.read(Http1Codec.java:449) ~[okhttp-3.12.0.jar!/:na]
    at okio.RealBufferedSource$1.read(RealBufferedSource.java:439) ~[okio-1.15.0.jar!/:na]
    at java.io.InputStream.read(InputStream.java:101) ~[na:1.8.0_171]
    at io.fabric8.kubernetes.client.utils.BlockingInputStreamPumper.run(BlockingInputStreamPumper.java:49) ~[kubernetes-client-4.2.2.jar!/:na]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_171]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_171]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_171]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_171]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_171]
2020-01-30 10:59:02.394  INFO 1 --- [       Thread-2] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown
2020-01-30 10:59:02.403  INFO 1 --- [       Thread-2] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans
2020-01-30 10:59:02.514  WARN 1 --- [       Thread-2] .s.c.a.CommonAnnotationBeanPostProcessor : Invocation of destroy method failed on bean with name 'proxyService': eu.openanalytics.containerproxy.ContainerProxyException: Failed to stop container
2020-01-30 10:59:02.525  INFO 1 --- [       Thread-2] io.undertow.servlet                      : Destroying Spring FrameworkServlet 'dispatcherServlet'

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. Spring Boot ์•ฑ์ด ์˜ฌ๋ฐ”๋ฅด๊ณ  ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ shinyproxy ๋˜๋Š” containerproxy์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” kubctl proxy ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค. Kubernetes์˜ ๊ฒฝ์šฐ containerproxy๊ฐ€ Kubernetes ์ž์ฒด์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ์— ์˜์กดํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒˆ ๋ฐฐํฌ์—์„œ Kubernetes๋Š” ๋ชจ๋“  ์ด์ „ ํฌ๋“œ์˜ ํ”„๋ก์‹œ์™€ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‘์— SIGTERM์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฆ‰์‹œ ์ข…๋ฃŒ๋˜๊ณ  containerproxy๊ฐ€ Kubernetes์™€ ํ†ต์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ๋Œ€๋กœ Kubernetes๊ฐ€ v1.18์—์„œ ์ด๋Ÿฌํ•œ ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/kubernetes/enhancements/issues/753
https://banzaicloud.com/blog/k8s-sidecars/

๊ทธ๋•Œ๊นŒ์ง€๋Š” ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ์— ๋‹ค์Œ ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

          lifecycle:
            preStop:
              exec:
                command: ["sh", "-c", "sleep 5"] # wait 5 seconds to let shinyproxy remove the pods on graceful shutdown

@fmannhardt ์˜ ์ˆ˜์ •์ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„

ShinyProxy์˜ ์ตœ์‹  ๋ฒ„์ „(์ •ํ™•ํžˆ ์–ด๋–ค ๋ฒ„์ „์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ ์–ด๋„ ShinyProxy 2.3.1)์—์„œ๋Š” kube-proxy ์‚ฌ์ด๋“œ์นด๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ShinyProxy๋Š” Kubernetes API์˜ ์œ„์น˜ ๋ฐ ์ธ์ฆ์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์ด ๋ฌธ์ œ๋Š” ์ž๋™์œผ๋กœ ํ•ด๊ฒฐ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ท€ํ•˜์˜ ์‹œ๊ฐ„๊ณผ ์กฐ์‚ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰