SNI ์ด์™ธ์˜ ํด๋ผ์ด์–ธํŠธ์™€ HTTP ํด๋ผ์ด์–ธํŠธ ์‚ฌ์šฉ ์„ค์ •

์ด ์ฃผ์ œ์—์„œ๋Š” Apigee Hybrid๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋น„SNI ํด๋ผ์ด์–ธํŠธ, HTTP ํด๋ผ์ด์–ธํŠธ, ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

SNI ์ด์™ธ์˜ ํด๋ผ์ด์–ธํŠธ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•

์ด ์„น์…˜์—์„œ๋Š” Apigee Hybrid์—์„œ SNI(์„œ๋ฒ„ ์ด๋ฆ„ ํ‘œ์‹œ) ์ด์™ธ์˜ ํด๋ผ์ด์–ธํŠธ์˜ ์ง€์›์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. SNI ์ด์™ธ์˜ ํด๋ผ์ด์–ธํŠธ๋Š” ํฌํŠธ 443์„ ์‚ฌ์šฉํ•˜๋ฉฐ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋Ÿฐํƒ€์ž„ ์ธ์Šคํ„ด์Šค๋ฅผ Google Cloud Load Balancing๊ณผ ํ†ตํ•ฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ๋‚˜ SNI๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํด๋ผ์ด์–ธํŠธ์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  1. ApigeeRoute ์ปค์Šคํ…€ ๋ฆฌ์†Œ์Šค ์ •์˜(CRD)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. enableNonSniClient๊ฐ€ true๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: ApigeeRoute
    metadata:
      name: route_name
      namespace: apigee
    spec:
      hostnames:
      - "*"
      ports:
      - number: 443
        protocol: HTTPS
        tls:
          credentialName: credential_name
          mode: SIMPLE
          #optional
          minProtocolVersion: TLS_AUTO
      selector:
        app: istio-ingressgateway
      enableNonSniClient: true
    

    ๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • route_name์€ CRD์— ์ง€์ •ํ•˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
    • credential_name์€ virtualhost์— ๋Œ€ํ•ด TLS ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ๋œ Kubernetes ๋ณด์•ˆ ๋น„๋ฐ€์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
    • hostname๋Š” ์™€์ผ๋“œ ์นด๋“œ '*'๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์žฌ์ •์˜ ํŒŒ์ผ์„ ์—ด๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„์— ์„ค๋ช…๋œ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ ํ™˜๊ฒฝ ๊ทธ๋ฃน์— ๋Œ€ํ•ด ApigeeRoute ์ด๋ฆ„์„ additionalGateways ์†์„ฑ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    virtualhosts:
      - name: default
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        additionalGateways: ["route_name"]
  4. CRD ํŒŒ์ผ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ApigeeRoute.yaml์ž…๋‹ˆ๋‹ค.
  5. CRD๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    kubectl apply -f ApigeeRoute.yaml -n apigee
  6. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ virtualhosts์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    $APIGEECTL_HOME/apigeectl apply -f overrides.yaml --settings virtualhosts --env $ENVIRONMENT

์‚ฌ์šฉ ์ฐธ๊ณ ์‚ฌํ•ญ

  • ํด๋Ÿฌ์Šคํ„ฐ์— ์กฐ์ง์ด 2๊ฐœ ์ด์ƒ ํฌํ•จ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

    ์ธ๊ทธ๋ ˆ์Šค๊ฐ€ ์ง€์ •๋œ ํฌํŠธ(443)์— ๋Œ€ํ•ด ํด๋Ÿฌ์Šคํ„ฐ ์ˆ˜์ค€์— ์žˆ๊ณ , ApigeeRoute CRD์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ํ‚ค/์ธ์ฆ์„œ ์Œ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ๋ชจ๋“  ์กฐ์ง์ด ๋™์ผํ•œ ํ‚ค/์ธ์ฆ์„œ ์Œ์„ ๊ณต์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํด๋Ÿฌ์Šคํ„ฐ์— ํ™˜๊ฒฝ ๊ทธ๋ฃน์ด 2๊ฐœ ์ด์ƒ ํฌํ•จ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”? ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ๊ฐ€ ๋™์ผํ•œ ํ‚ค/์ธ์ฆ์„œ ์Œ์„ ๊ณต์œ ํ•  ๊ฒฝ์šฐ ์ž‘๋™ํ•˜๋‚˜์š”?

    ๋ชจ๋“  ํ™˜๊ฒฝ ๊ทธ๋ฃน ๊ฐ„์˜ ๋ชจ๋“  ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด ๋™์ผํ•œ ํ‚ค/์ธ์ฆ์„œ ์Œ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฒŒ์ดํŠธ์›จ์ด ๋Œ€์‹  ApigeeRoute๋ฅผ ๋งŒ๋“œ๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

    ApigeeRoutes๋Š” Apigee๋กœ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฒŒ์ดํŠธ์›จ์ด(Istio CRD)๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ๊ฒŒ์ดํŠธ์›จ์ด๋„ ์ž‘๋™ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ž ์žฌ์ ์ธ ๊ตฌ์„ฑ ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ฒ€์ฆ ์›นํ›… ์‚ฌ์šฉ).

HTTP ํด๋ผ์ด์–ธํŠธ ์‚ฌ์šฉ ์„ค์ •

์ด ์„น์…˜์—์„œ๋Š” Apigee Hybrid์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” HTTP ํด๋ผ์ด์–ธํŠธ ์ง€์›์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  1. ApigeeRoute ์ปค์Šคํ…€ ๋ฆฌ์†Œ์Šค ์ •์˜(CRD)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: ApigeeRoute
    metadata:
      name: route_name
      namespace: apigee
    spec:
      hostnames:
      - "*"
      ports:
      - number: 80
        protocol: HTTP
      selector:
        app: istio-ingressgateway
      enableNonSniClient: true

    ๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • route_name์€ CRD์— ์ง€์ •ํ•˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
    • hostnames๋Š” ์™€์ผ๋“œ ์นด๋“œ '*'๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์žฌ์ •์˜ ํŒŒ์ผ์„ ์—ด๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„์— ์„ค๋ช…๋œ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ ํ™˜๊ฒฝ ๊ทธ๋ฃน์— ๋Œ€ํ•ด ApigeeRoute ์ด๋ฆ„์„ additionalGateways ์†์„ฑ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    virtualhosts:
      - name: default
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        additionalGateways: ["route_name"]
  4. CRD ํŒŒ์ผ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ApigeeRoute.yaml์ž…๋‹ˆ๋‹ค.
  5. CRD๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    kubectl apply -f ApigeeRoute.yaml -n apigee
  6. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ virtualhosts์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    $APIGEECTL_HOME/apigeectl apply -f overrides.yaml --settings virtualhosts --env $ENVIRONMENT

SNI ์ด์™ธ์˜ ํด๋ผ์ด์–ธํŠธ์™€ HTTP ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘ ์ง€์› ์‚ฌ์šฉ ์„ค์ •

์ด ์„น์…˜์—์„œ๋Š” Apigee Hybrid์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก SNI ์ด์™ธ์˜(ํฌํŠธ 443) ํด๋ผ์ด์–ธํŠธ์™€ HTTP (ํฌํŠธ 80) ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  1. ApigeeRoute ์ปค์Šคํ…€ ๋ฆฌ์†Œ์Šค ์ •์˜(CRD)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: ApigeeRoute
    metadata:
      name: route_name
      namespace: apigee
    spec:
      hostnames:
      - "*"
      ports:
      - number: 443
        protocol: HTTPS
        tls:
          credentialName: credential_name
          mode: SIMPLE
          #optional
          minProtocolVersion: TLS_AUTO
      - number: 80
        protocol: HTTP
      selector:
        app: istio-ingressgateway
      enableNonSniClient: true

    ๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • route_name์€ CRD์— ์ง€์ •ํ•˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
    • hostnames๋Š” ์™€์ผ๋“œ ์นด๋“œ '*'๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • credential_name์€ virtualhost์— ๋Œ€ํ•ด TLS ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ๋œ Kubernetes ๋ณด์•ˆ ๋น„๋ฐ€์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  2. ์žฌ์ •์˜ ํŒŒ์ผ์„ ์—ด๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„์— ์„ค๋ช…๋œ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ ํ™˜๊ฒฝ ๊ทธ๋ฃน์— ๋Œ€ํ•ด ApigeeRoute ์ด๋ฆ„์„ additionalGateways ์†์„ฑ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    virtualhosts:
      - name: default
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        additionalGateways: ["route_name"]
  4. CRD ํŒŒ์ผ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ApigeeRoute.yaml์ž…๋‹ˆ๋‹ค.
  5. CRD๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    kubectl apply -f ApigeeRoute.yaml -n apigee
  6. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ virtualhosts์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    $APIGEECTL_HOME/apigeectl apply -f overrides.yaml --settings virtualhosts --env $ENVIRONMENT