๋Ÿฐํƒ€์ž„ ์˜์—ญ๊ณผ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์‚ฌ์ด์— ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์—†์Œ

Apigee ๋ฐ Apigee Hybrid ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.
์ด ์ฃผ์ œ์— ํ•ด๋‹นํ•˜๋Š” Apigee Edge ๋ฌธ์„œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ฆ์ƒ

  • API ์ œํ’ˆ, ๊ฐœ๋ฐœ์ž, ์•ฑ์ด Apigee UI์— ์ฑ„์›Œ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • API ํ”„๋ก์‹œ ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • API ์ œํ’ˆ, ๊ฐœ๋ฐœ์ž, ์•ฑ์„ ์ฝ๊ณ  ์“ฐ๊ธฐ ์œ„ํ•ด ์‹คํ–‰๋œ Management API ์š”์ฒญ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€

์ด ์„น์…˜์—์„œ๋Š” ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ์—†์„ ๋•Œ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

ApigeeIssue

์ด ๋ฌธ์ œ๊ฐ€ ApigeeIssue๋กœ ๋ณด๊ณ ๋˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.

kubectl -n APIGEE_NAMESPACE get apigeeissues

์—ฌ๊ธฐ์„œ APIGEE_NAMESPACE๋Š” Kubernetes ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ์ฝ”๋“œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

NAME                               SEVERITY    AGE URL
control-plane-connectivity-failure Error       1hr https://cloud.google.com/apigee/docs/api-platform/troubleshoot/playbooks/no-network-connectivity

API ์ œํ’ˆ, ๊ฐœ๋ฐœ์ž, ์•ฑ Apigee UI ํŽ˜์ด์ง€

API ์ œํ’ˆ, ๊ฐœ๋ฐœ์ž, ์•ฑ Apigee UI ํŽ˜์ด์ง€์— ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Error: no connections available from the Apigee connect agent(s):
refer to documentation to triage further.

apigee-synchronizer ๋กœ๊ทธ

apigee-synchronizer ๋กœ๊ทธ์— ๋‹ค์Œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{"level":"SEVERE","thread":"Apigee-Timer-3","mdc":{"action":"SYNC","env":"dev",
  "org":"example-hybrid-dev"},"className":"com.apigee.httpclient.adaptor.RequestAdaptor",
  "method":"doSend","severity":"SEVERE","message":"request failed
  [CONTEXT ratelimit_period\u003d\"1 MINUTES [skipped: 1]\" ]",
  "formattedDate":"2023-02-01T06:27:48.700Z","logger":"SERVICES.HTTPCLIENTSERVICE",
  "exceptionStackTrace":"java.net.SocketTimeoutException: connect timed out
... com.apigee.httpclient.adaptor.RequestAdaptor.send(RequestAdaptor.java:251)
at com.apigee.hybrid.runtime.contract.sync.context.HttpContractDownloader.download(HttpContractDownloader.java:84)
at com.apigee.hybrid.runtime.contract.sync.context.ControlPlaneReplicationContext.getContract(ControlPlaneReplicationContext.java:66)

apigee-watcher ๋กœ๊ทธ

apigee-watcher ๋กœ๊ทธ์— ๋‹ค์Œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{"level":"error","ts":1675232549.5093117,"caller":"watcher/watcher.go:60",
"msg":"error during watch","name":"mpstatus","error":"INTERNAL: error sending
  mp status to mgmt: INTERNAL: failed to send runtime status
  Post \"https://apigee.googleapis.com/v1/organizations/example-hybrid-dev/instances/apigee-hybrid-australia-southeast1:reportStatus\":
  dial tcp 172.217.24.42:443: i/o timeout","stacktrace":
  "edge-internal.git.corp.google.com/apigee-watcher.git/watcher.
  (*Watcher).Start.func1.1\n\t/go/src/edge-internal/apigee-watcher/watcher/watcher.go:60"}

๊ฐ€๋Šฅํ•œ ์›์ธ

ํ”Œ๋žซํผ ์›์ธ ์„ค๋ช…
์ „์ฒด ์ธํ„ฐ๋„ท์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ ๊ฒฝ๋กœ ์—†์Œ ์ธํ„ฐ๋„ท์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ ๊ฒฝ๋กœ๊ฐ€ ์—†์œผ๋ฉด Apigee ๋Ÿฐํƒ€์ž„ ์˜์—ญ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ Apigee ์ œ์–ด ์˜์—ญ API์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ „์ฒด Apigee API ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์—†์Œ ๋ฐฉํ™”๋ฒฝ์ด ์žˆ์œผ๋ฉด Apigee API ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
GKE ๋น„๊ณต๊ฐœ Google ์•ก์„ธ์Šค๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์ง€ ์•Š์Œ ๋ฐฐํฌ๊ฐ€ GKE์— ์žˆ์œผ๋ฉด ์„œ๋ธŒ๋„ท์— ๋น„๊ณต๊ฐœ Google ์•ก์„ธ์Šค๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ „์ฒด ์•Œ ์ˆ˜ ์—†๋Š” ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ์‹œ ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ์—์„œ ์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›์ธ: ์ธํ„ฐ๋„ท์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ ๊ฒฝ๋กœ๊ฐ€ ์—†์Œ

์ง„๋‹จ

  1. ์‚ฌ์šฉ๋œ ํ”Œ๋žซํผ์— ๋”ฐ๋ผ ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ์—์„œ ์ธํ„ฐ๋„ท๊นŒ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด GKE์˜ ๋„คํŠธ์›Œํ‚น์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋„คํŠธ์›Œํฌ ๊ฐœ์š”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  2. ์ธํ”„๋ผ ๋ฐ ๋„คํŠธ์›Œํ‚นํŒ€์— ๋ฌธ์˜ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ์—์„œ ์ „๋‹ฌ ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ๊ฒฝ๋กœ๋ฅผ ์ธํ„ฐ๋„ท์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค(๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ).
  2. ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ์™€ ์ธํ„ฐ๋„ท ๊ฐ„ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ์ „๋‹ฌ ํ”„๋ก์‹œ ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ overrides.yaml ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ Apigee์—์„œ ์ „๋‹ฌ ํ”„๋ก์‹œ ์„œ๋ฒ„ ์„ค์ •์„ ๊ตฌ์„ฑํ•˜๊ณ  Helm ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์˜์—ญ์— ํ•ด๋‹น ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ ์šฉํ•˜์„ธ์š”.

    ํ…Œ์ŠคํŠธ ์‹คํ–‰์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
    --namespace APIGEE_NAMESPACE \
    --atomic \
    --set envgroup=ENV_GROUP \
    -f OVERRIDES_FILE \
    --dry-run=server
    

    ์ž‘์—…์ด ์‹คํŒจ ์‹œ ๋กค๋ฐฑ๋˜๋„๋ก --atomic์„ ๋น„๋กฏํ•˜์—ฌ ํ‘œ์‹œ๋œ ๋ชจ๋“  ์„ค์ •์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ์„ค์น˜๊ฐ€ ENV_GROUP๊ณผ ๋‹ค๋ฅธ ENV_GROUP_RELEASE_NAME์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •๋˜์—ˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Helm์„ ์‚ฌ์šฉํ•˜์—ฌ Apigee Hybrid ์„ค์น˜๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

    ์ฐจํŠธ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
    --namespace APIGEE_NAMESPACE \
    --atomic \
    --set envgroup=ENV_GROUP \
    -f OVERRIDES_FILE
    

์›์ธ: Apigee API ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์—†์Œ

์ง„๋‹จ

๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•˜์—ฌ Apigee๊ฐ€ ์„ค์น˜๋œ ํ”Œ๋žซํผ์˜ ๋ฐฉํ™”๋ฒฝ์—์„œ Apigee API ์—”๋“œํฌ์ธํŠธ ๋ชฉ๋ก์ด ํ—ˆ์šฉ ๋ชฉ๋ก์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. GKE์˜ ๊ฒฝ์šฐ์—๋Š” Cloud Next Generation Firewall์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์œ„ Apigee API ์—”๋“œํฌ์ธํŠธ ๋ชฉ๋ก์ด ํ—ˆ์šฉ ๋ชฉ๋ก์— ์—†์œผ๋ฉด ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•˜์—ฌ ์š”๊ตฌ์‚ฌํ•ญ์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์›์ธ: ๋น„๊ณต๊ฐœ Google ์•ก์„ธ์Šค๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์ง€ ์•Š์Œ

์ง„๋‹จ

  1. Apigee๊ฐ€ ์ธํ„ฐ๋„ท์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๋น„๊ณต๊ฐœ GKE ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ๋œ ๊ฒฝ์šฐ Apigee ๋Ÿฐํƒ€์ž„ ์˜์—ญ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ Google API์— ๋‚ด๋ถ€์ ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ๋น„๊ณต๊ฐœ Google ์•ก์„ธ์Šค๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. Google Cloud ์ฝ˜์†”์—์„œ VPC ๋„คํŠธ์›Œํฌ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    VPC ๋„คํŠธ์›Œํฌ๋กœ ์ด๋™

  3. ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ์„œ๋ธŒ๋„ท ํƒญ์˜ ๋น„๊ณต๊ฐœ Google ์•ก์„ธ์Šค ์—ด์—์„œ ๊ด€๋ จ ์„œ๋ธŒ๋„ท์ด ์‚ฌ์šฉ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๊ฒƒ์ด ์‹คํŒจ ์›์ธ์ž…๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. Google Cloud ์ฝ˜์†”์—์„œ VPC ๋„คํŠธ์›Œํฌ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    VPC ๋„คํŠธ์›Œํฌ๋กœ ์ด๋™

  2. ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ์„œ๋ธŒ๋„ท์˜ ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  5. ๋น„๊ณต๊ฐœ Google ์•ก์„ธ์Šค ์‚ฌ์šฉ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  6. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์›์ธ: ์•Œ ์ˆ˜ ์—†๋Š” ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜

์ง„๋‹จ

๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ์— ์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ์ž์™€ ํ˜‘๋ ฅํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์ง„๋‹จ ์ •๋ณด ์ˆ˜์ง‘ ํ•„์š”

์œ„ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅธ ํ›„์—๋„ ๋ฌธ์ œ๊ฐ€ ์ง€์†๋˜๋ฉด ๋‹ค์Œ ์ง„๋‹จ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•œ ํ›„ Google Cloud Customer Care์— ๋ฌธ์˜ํ•˜์„ธ์š”.

  1. Google Cloud ํ”„๋กœ์ ํŠธ ID
  2. Apigee Hybrid ์กฐ์ง์˜ ์ด๋ฆ„
  3. ๋ชจ๋“  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋œ ๋‹ค์Œ ๋ช…๋ น์–ด์˜ ์ถœ๋ ฅ
    ping apigee.googleapis.com
    traceroute apigee.googleapis.com
    telnet apigee.googleapis.com 443
  4. ๋ชจ๋“  ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๋งˆ์Šคํ‚นํ•˜๋Š” overrides.yaml ํŒŒ์ผ
  5. ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ Kubernetes ํฌ๋“œ ์ƒํƒœ:
    kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
  6. Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ •๋ณด ๋คํ”„:

    Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ •๋ณด ๋คํ”„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump

    ZIP Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ •๋ณด ๋คํ”„:

    zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*