kubernetes_service

์„œ๋น„์Šค: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŒŒ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ

  • ์„œ๋น„์Šค

    • image

    • Pod ์ง‘ํ•ฉ๊ณผ ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ธฐ์ˆ ํ•˜๋Š” API ๊ฐ์ฒด

    • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์„œ๋น„์Šค๋Š” ๋™์ผํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํŒŒ๋“œ ๊ทธ๋ฃน์— ์ง€์†์ ์ธ ๋‹จ์ผ ์ ‘์ ์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•  ๋•Œ ์ƒ์„ฑํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋กœ ๊ฐ ์„œ๋น„์Šค๋Š” ์„œ๋น„์Šค๊ฐ€ ์กด์žฌํ•˜๋Š” ๋™์•ˆ ์ ˆ๋Œ€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” IP ์ฃผ์†Œ์™€ ํฌํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น IP์™€ ํฌํŠธ๋กœ ์ ‘์†ํ•œ ๋‹ค์Œ ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ์ง€์›ํ•˜๋Š” ํŒŒ๋“œ ์ค‘ ํ•˜๋‚˜๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

    • Service์˜ Cluster IP๋ฅผ ํ†ตํ•ด ์œ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ  ์‚ฌ๋ผ์ง€๋Š” Pod์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • ClusterIP , NodePort , LoadBalancer ํƒ€์ž… ์ œ๊ณตํ•˜๋ฉฐ ๊ธฐ๋ณธ ์˜ต์…˜์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Cluster IP์ž…๋‹ˆ๋‹ค.

    • ์—ฌ๋Ÿฌ Pod๋ฅผ ๋ฌถ์–ด Healthyํ•œ Pod๋กœ Traffic ๋ผ์šฐํŒ…ํ•˜๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ธฐ๋Šฅ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    • ํด๋Ÿฌ์Šคํ„ฐ์˜ Service CIDR ์ค‘์—์„œ ์ง€์ •๋œ IP๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    • apiVersion: v1
      kind: Service
      metadata:
        name: kubia
      spec:
        ports:
        - port: 80
          targetPort: 8080
        selector:
          app: kubia
    • ์„œ๋น„์Šค ์ƒ์„ฑ

      • kubectl expose๋กœ ์„œ๋น„์Šค ์ƒ์„ฑ

        • expose ๋ช…๋ น์–ด๋Š” ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์‚ฌ์šฉ๋œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ํŒŒ๋“œ ์…€๋ ‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ์„œ๋น„์Šค ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ชจ๋“  ํŒŒ๋“œ๋ฅผ ๋‹จ์ผ IP ์ฃผ์†Œ์™€ ํฌํŠธ๋กœ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

      • ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์— ์›๊ฒฉ์œผ๋กœ ๋ช…๋ น์–ด ์‹คํ–‰

        • kubectl exec ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด ํŒŒ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์›๊ฒฉ์œผ๋กœ ์ž„์˜์˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์˜ ๋‚ด์šฉ, ์ƒํƒœ, ํ™˜๊ฒฝ์„ ๊ฒ€์‚ฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

        • kubectl exec {k get pods์˜ ํŒŒ๋“œ} -- curl -s {http://10.111.249.153 - k get svc์˜ ํด๋Ÿฌ์Šคํ„ฐ IP}

          • ๋ช…๋ น์–ด์˜ ๋”๋ธ” ๋Œ€์‹œ(--)๋Š” kubectl ๋ช…๋ น์ค„ ์˜ต์…˜์˜ ๋์„ ์˜๋ฏธํ•˜๋ฉฐ ๋”๋ธ” ๋Œ€์‹œ ๋’ค์˜ ๋ชจ๋“  ๊ฒƒ์€ ํŒŒ๋“œ ๋‚ด์—์„œ ์‹คํ–‰๋ผ์•ผ ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

  • ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์— ์žˆ๋Š” ์„œ๋น„์Šค ์—ฐ๊ฒฐ

    • apiVersion: v1
      kind: Endpoints
      metadata:
        name: external-service
      subsets:
        - addresses:
          - ip: 11.11.11.11
          - ip: 22.22.22.22
          ports:
          - port: 80
    • image

    • ์„œ๋น„์Šค ์—”๋“œํฌ์ธํŠธ

      • ์„œ๋น„์Šค๋Š” ํŒŒ๋“œ์— ์ง์ ‘ ์—ฐ๊ฒฐ(link)๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ์—”๋“œํฌ์ธํŠธ ๋ฆฌ์†Œ์Šค๊ฐ€ ๊ทธ ์‚ฌ์ด์— ์žˆ์Šต๋‹ˆ๋‹ค.

      • ์—”๋“œํฌ์ธํŠธ ๋ฆฌ์†Œ์Šค๋Š” ์„œ๋น„์Šค๋กœ ๋…ธ์ถœ๋˜๋Š” ํŒŒ๋“œ์˜ IP ์ฃผ์†Œ์™€ ํฌํŠธ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

    • ์™ธ๋ถ€ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ๋ณ„์นญ ์ƒ์„ฑ

      • ExternalName ์„œ๋น„์Šค ์ƒ์„ฑ

        • ์™ธ๋ถ€ ์„œ๋น„์Šค์˜ ๋ณ„์นญ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์œ ํ˜•(type) ํ•„๋“œ๋ฅผ ExternalName์œผ๋กœ ์„ค์ •ํ•ด ์„œ๋น„์Šค ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ฌ

  • ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ์— ์„œ๋น„์Šค ๋…ธ์ถœ

    • ์™ธ๋ถ€์—์„œ ์„œ๋น„์Šค๋ฅผ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•

      • image

      • ๋…ธ๋“œํฌํŠธ๋กœ ์„œ๋น„์Šค ์œ ํ˜• ์„ค์ • : ๋…ธ๋“œํฌํŠธ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ๋Š” ๋…ธ๋“œ ์ž์ฒด์—์„œ ํฌํŠธ๋ฅผ ๊ฒฐ๊ณ  ํ•ด๋‹น ํฌํŠธ๋กœ ์ˆ˜์‹ ๋œ ํŠธ๋ž˜ํ”ฝ์„ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค๋Š” ๋‚ด๋ถ€ ํด๋Ÿฌ์Šคํ„ฐ IP์™€ ํฌํŠธ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ „์šฉ ํฌํŠธ๋กœ๋„ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      • ์„œ๋น„์Šค ์œ ํ˜•์„ ๋…ธ๋“œํฌํŠธ ์œ ํ˜•์˜ ํ™•์žฅ์ธ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋กœ ์„ค์ • : ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ์—์„œ ํ”„๋กœ๋น„์ €๋‹๋œ ์ „์šฉ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋กœ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋ชจ๋“  ๋…ธ๋„์˜ ๋…ธ๋“œํฌํŠธ๋กœ ์ „๋‹ฌํ•˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์˜ IP๋กœ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.

      • ๋‹จ์ผ IP ์ฃผ์†Œ๋กœ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ๋…ธ์ถœํ•˜๋Š” ์ธ๊ทธ๋ ˆ์Šค ๋ฆฌ์†Œ์Šค ๋งŒ๋“ค๊ธฐ : HTTP ๋ ˆ๋ฒจ์—์„œ ์ž‘๋™ํ•˜๋ฏ€๋กœ 4๊ณ„์ธต ์„œ๋น„์Šค๋ณด๋‹ค ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

    • ๋…ธ๋“œํฌํŠธ ์„œ๋น„์Šค ์‚ฌ์šฉ

      • image

      • apiVersion: v1
        kind: Service
        metadata:
          name: kubia-nodeport
        spec:
          type: NodePort
          ports:
          - port: 80
            targetPort: 8080
            nodePort: 30123
          selector:
            app: kubia
      • ๋…ธ๋“œํฌํŠธ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ํŠน์ • ํฌํŠธ๋ฅผ ํ• ๋‹นํ•˜๊ณ (๋ชจ๋“  ๋…ธ๋“œ์—์„œ ๋™์ผํ•œ ํฌํŠธ ๋ฒˆํ˜ธ๊ฐ€ ์‚ฌ์šฉ๋จ) ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํŒŒ๋“œ๋กœ ๋“ค์–ด์˜ค๋Š” ์—ฐ๊ฒฐ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

      • ์ผ๋ฐ˜ ์„œ๋น„์Šค(์‹ค์ œ ์œ ํ˜•์€ ClusterIP)์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์„œ๋น„์Šค์˜ ๋‚ด๋ถ€ ํด๋Ÿฌ์Šคํ„ฐ IP๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ๋…ธ๋“œ์˜ IP์™€ ํ• ๋‹น๋œ ๋…ธ๋“œํฌํŠธ๋กœ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      • ๋…ธ๋“œํฌํŠธ ์„œ๋น„์Šค ํ™•์ธ

        • $ kubectl get svc kubia-nodeport
          NAME             CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
          kubia-nodeport   10.111.254.223   <nodes>       80:30123/TCP   2m
        • EXTERNAL-IP์— ๋ผ๊ณ  ํ‘œ์‹œ๋ผ ์žˆ๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์˜ IP ์ฃผ์†Œ๋กœ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ„

    • ์™ธ๋ถ€ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋กœ ์„œ๋น„์Šค ๋…ธ์ถœ

      • image

      • ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์ž์—์„œ ์‹คํ–‰๋˜๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ์—์„œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ž๋™์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

      • ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” ๊ณต๊ฐœ์ ์œผ๋กœ ์•ก์„ธ์Šค ๊ฐ€๋Šฅํ•œ ๊ณ ์œ ํ•œ IP์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋ชจ๋“  ์—ฐ๊ฒฐ์„ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์˜ IP ์ฃผ์†Œ๋กœ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ธ๊ทธ๋ ˆ์Šค ๋ฆฌ์†Œ์Šค๋กœ ์„œ๋น„์Šค ์™ธ๋ถ€ ๋…ธ์ถœ

    • image

    • ์ธ๊ทธ๋ ˆ์Šค๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

      • ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์„œ๋น„์Šค๋Š” ์ž์‹ ์˜ ๊ณต์šฉ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ, ์ธ๊ทธ๋ ˆ์Šค๋Š” ํ•œ IP ์ฃผ์†Œ๋กœ ์ˆ˜์‹ญ ๊ฐœ์˜ ์„œ๋น„์Šค์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ง€์›ํ•ด์ค๋‹ˆ๋‹ค.

      • ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTP ์š”์ฒญ์„ ์ธ๊ทธ๋ ˆ์Šค์— ๋ณด๋‚ผ ๋•Œ, ์š”์ฒญํ•œ ํ˜ธ์ŠคํŠธ์™€ ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ์š”์ฒญ์„ ์ „๋‹ฌํ•  ์„œ๋น„์Šค๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

      • ์ธ๊ทธ๋ ˆ์Šค๋Š” ๋„คํŠธ์›Œํฌ ์Šคํƒ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต(HTTP)์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ์„œ๋น„์Šค๊ฐ€ ํ•  ์ˆ˜ ์—†๋Š” ์ฟ ํ‚ค ๊ธฐ๋ฐ˜ ์„ธ์…˜ ์–ดํ”ผ๋‹ˆํ‹ฐ ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค ๋ฌธ์ œ ํ•ด๊ฒฐ

    • ๋จผ์ € ์™ธ๋ถ€๊ฐ€ ์•„๋‹Œ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์„œ๋น„์Šค์˜ ํด๋Ÿฌ์Šคํ„ฐ IP์— ์—ฐ๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    • ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ์„œ๋น„์Šค IP๋กœ ํ•‘์„ ํ•  ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.(์„œ๋น„์Šค์˜ ํด๋Ÿฌ์Šคํ„ฐ IP๋Š” ๊ฐ€์ƒ IP์ด๋ฏ€๋กœ ํ‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

    • ๋ ˆ๋””๋‹ˆ์Šค ํ”„๋กœ๋ธŒ๋ฅผ ์ •์˜ํ–ˆ๋‹ค๋ฉด ์„ฑ๊ณตํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ผ. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํŒŒ๋“œ๋Š” ์„œ๋น„์Šค์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • ํŒŒ๋“œ๊ฐ€ ์„œ๋น„์Šค์˜ ์ผ๋ถ€์ธ์ง€ ํ™•์ธํ•˜๋ ค๋ฉด kubectl get endpoints๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๋‹น ์—”๋“œํฌ์ธํŠธ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    • FQDN์ด๋‚˜ ๊ทธ ์ผ๋ถ€(myservice.mynamespace.svc.cluster.local ๋˜๋Š” myservice.mynamespace)๋กœ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, FQDN ๋Œ€์‹  ํด๋Ÿฌ์Šคํ„ฐ IP๋ฅผ ์‚ฌ์šฉํ•ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    • ๋Œ€์ƒ ํฌํŠธ๊ฐ€ ์•„๋‹Œ ์„œ๋น„์Šค๋กœ ๋…ธ์ถœ๋œ ํฌํŠธ์— ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    • ํŒŒ๋“œ IP์— ์ง์ ‘ ์—ฐ๊ฒฐํ•ด ํŒŒ๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ํฌํŠธ์— ์—ฐ๊ฒฐ๋ผ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    • ํŒŒ๋“œ IP๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋กœ์ปฌํ˜ธ์ŠคํŠธ์—๋งŒ ๋ฐ”์ธ๋”ฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Reference

  • https://www.oreilly.com/library/view/kubernetes-in-action/9781617293726/

  • https://www.oreilly.com/library/view/cloud-native-devops/9781492040750/

Last updated