เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #3: เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹

เด’เดฐเต เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดฆเตƒเดถเตเดฏเดตเตฝเด•เตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ Istio+Kiali เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต

เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #3: เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹

เดˆ เดชเดฐเดฎเตเดชเดฐเดฏเดฟเดฒเต† เดฒเต‡เด–เดจเด™เตเด™เตพ

  1. เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #1: Gitlab CI
  2. เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ
  3. (เดˆ เดฒเต‡เด–เดจเด‚)
  4. Jenkins-X Istio Flagger เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเดณเตเดณ เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚

เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚

เดจเดฟเด™เตเด™เตพ เดตเดพเดฏเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต เด†เดฆเตเดฏ เดญเดพเด—เด‚, เด…เดตเดฟเดŸเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด™เตเด™เตพ เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดธเด‚เด•เตเดทเดฟเดชเตเดคเดฎเดพเดฏเดฟ เดตเดฟเดถเดฆเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดต เดŽเด™เตเด™เดจเต† เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเดฎเต†เดจเตเดจเต เด•เดพเดฃเดฟเดšเตเดšเตเดคเดฐเดฟเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต.

เด‡เดธเตเดคเต‹

เดˆ เดฒเต‡เด–เดจเด‚ เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดธเตเดคเดฟเดฏเต‹ เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเต เด‡เดคเดฟเดจเด•เด‚ เด…เดฑเดฟเดฏเดพเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด…เดจเตเดฎเดพเดจเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดตเดพเดฏเดฟเด•เตเด•เดพเด‚ เด‡เดตเดฟเดŸเต†.

เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพเด•เตเด•เตเดณเตเดณ เด…เดชเต‡เด•เตเดท

เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #3: เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹

เด“เดฐเต‹ เดชเต‹เดกเดฟเดฒเตเด‚ เดฐเดฃเตเดŸเต เด•เดฃเตเดŸเต†เดฏเตเดจเดฑเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต: เดžเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด‚ istio-proxy.

เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปโ€ŒเดŽเตปโ€Œเดœเดฟโ€ŒเดŽเตปโ€ŒเดŽเด•เตเดธเต, เดฌเดพเด•เตเด•เตโ€ŒเดŽเตปเดกเต เดชเตˆเดคเตเดคเตบ เดชเต‹เดกเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดžเด™เตเด™เตพ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดŸเต†เดธเตเดฑเตเดฑเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚. nginx เดชเต‹เดกเต เด“เดฐเต‹ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเด‚ เดฌเดพเด•เตเด•เต†เตปเดกเต เดชเต‹เดกเดฟเดฒเต‡เด•เตเด•เต เดฑเต€เดกเดฏเดฑเด•เตเดŸเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เด’เดฐเต เดชเตเดฐเต‹เด•เตเดธเดฟ เด†เดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚. เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดฏเดพเดฎเตเด•เดณเดฟเตฝ เด•เดพเดฃเดพเด‚:

เดŸเต†เดธเตเดฑเตเดฑเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเตเดตเดฏเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดจเตเดฑเต† เดฎเดพเดคเตƒเด• เดชเดฟเดจเตเดคเตเดŸเดฐเดพเดจเตเด‚ เดˆ เดŸเต†เดธเตเดฑเตเดฑเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเตเดตเดฏเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเตเด‚ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด•เดพเดฃเตเด• เดชเดฆเตเดงเดคเดฟ เดตเดพเดฏเดฟเด•เตเด•เตเด•.

เดชเตเดฐเดพเดฐเด‚เดญ เดตเดฟเดจเตเดฏเดพเดธเด‚

เดžเด™เตเด™เตพ เด†เดฆเตเดฏ เดตเดฟเดจเตเดฏเดพเดธเด‚ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดžเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เดชเต‹เดกเตเด•เตพเด•เตเด•เต 2 เด•เดฃเตเดŸเต†เดฏเตเดจเดฑเตเด•เตพ เดฎเดพเดคเตเดฐเดฎเต‡เดฏเตเดณเตเดณเต‚เดตเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเต, เด…เดคเดพเดฏเดคเต, เด‡เดธเตเดคเดฟเดฏเต‹ เดธเตˆเดกเตเด•เดพเตผ เด‡เดชเตเดชเต‹เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต:

เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #3: เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹

เดจเต†เดฏเดฟเด‚เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเดฟเตฝ เด‡เดธเตเดคเดฟเดฏเต‹ เด—เต‡เดฑเตเดฑเตโ€Œเดตเต‡ เดฒเต‹เดกเตเดฌเดพเดฒเตปเดธเดฑเตเด‚ เดžเด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเต istio-system:

เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #3: เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹

เดŸเตเดฐเดพเดซเดฟเด•เต เดœเดจเดฑเต‡เดทเตป

เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต เดชเต‹เดกเตเด•เตพ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดฌเดพเด•เตเด•เต†เตปเดกเต เดชเต‹เดกเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดซเต‹เตผเดตเต‡เดกเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดŸเตเดฐเดพเดซเดฟเด•เต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดเดชเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚:

while true; do curl -s --resolve 'frontend.istio-test:80:35.242.202.152' frontend.istio-test; sleep 0.1; done

เดžเด™เตเด™เดณเตเด‚ เดšเต‡เตผเด•เตเด•เตเด‚ frontend.istio-test เดžเด™เตเด™เดณเตเดŸเต† เดนเต‹เดธเตเดฑเตเดฑเต เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต.

เด•เดฟเดฏเดพเดฒเดฟ เดตเดดเดฟ เดฎเต†เดทเต เด•เดพเดฃเตเด•

เดŸเตเดฐเต†เดฏเตโ€Œเดธเดฟเด‚เด—เต, เด—เตเดฐเดพเดซเดพเดจ, เดชเตเดฐเตŠเดฎเดฟเดคเตเดฏเต‚เดธเต, เด•เดฟเดฏเดพเดฒเดฟ เดŽเดจเตเดจเดฟเดตเดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดžเด™เตเด™เตพ เดŸเต†เดธเตเดฑเตเดฑเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด‚ เด‡เดธเตเดคเดฟเดฏเต‹เดฏเตเด‚ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดคเต (เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพเด•เตเด•เต เดšเตเดตเดŸเต† เด•เดพเดฃเตเด•). เดชเดฆเตเดงเดคเดฟ เดตเดพเดฏเดฟเด•เตเด•เตเด•). เด…เดคเดฟเดจเดพเตฝ เดจเดฎเตเด•เตเด•เต เด•เดฟเดฏเดพเดฒเดฟ เด‡เดคเตเดตเดดเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚:

istioctl dashboard kiali # admin:admin

เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #3: เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹

เดฎเต†เดทเดฟเดฒเต‚เดŸเต† เดจเดฟเดฒเดตเดฟเดฒเต† เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเดจเต† เด•เดฟเดฏเดพเดฒเดฟ เดฆเตƒเดถเตเดฏเดตเตฝเด•เตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต

เดžเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเดจเดพเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเดจเตเดฑเต† 100% เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต เดธเต‡เดตเดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเด‚ เดคเตเดŸเตผเดจเตเดจเต v1 เดฒเต‡เดฌเดฒเตเดณเตเดณ เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต เดชเต‹เดกเตเด•เดณเดฟเดฒเต‡เด•เตเด•เตเด‚ เดชเต‹เด•เตเดจเตเดจเต, เด•เดพเดฐเดฃเด‚ เดžเด™เตเด™เตพ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ nginx เดชเตเดฐเต‹เด•เตเดธเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เดฌเดพเด•เตเด•เต†เตปเดกเต เดธเต‡เดตเดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเตเดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด…เดคเต เด…เดตเดฏเต† เดฌเดพเด•เตเด•เต†เตปเดกเต เดชเต‹เดกเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเตเดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดฒเต‡เดฌเดฒเดฟเดจเตŠเดชเตเดชเด‚ v1.

เด•เดฟเดฏเดพเดฒเดฟ เด‡เดธเตเดคเดฟเดฏเต‹เดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดฎเดฟเด•เดšเตเดš เดฐเต€เดคเดฟเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดฌเต‹เด•เตโ€Œเดธเต เดšเต†เดฏเตโ€Œเดค เดฎเต†เดทเต เดฑเต†เตปเดกเดฑเดฟเด‚เด—เต เดชเดฐเดฟเดนเดพเดฐเด‚ เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด‰เด—เตเดฐเตป.

เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚

เดžเด™เตเด™เดณเตเดŸเต† เดฌเดพเด•เตเด•เต†เตปเดกเดฟเตฝ เด‡เดคเดฟเดจเด•เด‚ เดฐเดฃเตเดŸเต k8s เดตเดฟเดจเตเดฏเดพเดธเด™เตเด™เดณเตเดฃเตเดŸเต, เด’เดจเตเดจเต v1-เดจเตเด‚ เด’เดจเตเดจเต v2-เดจเตเด‚. เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดถเดคเดฎเดพเดจเด‚ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ v2-เดฒเต‡เด•เตเด•เต เด•เตˆเดฎเดพเดฑเดพเตป เดจเดฎเตเด•เตเด•เต เด‡เดชเตเดชเต‹เตพ เด‡เดธเตเดคเดฟเดฏเต‹เดฏเต‹เดŸเต เดชเดฑเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เด˜เดŸเตเดŸเด‚ 1: 10%

เดžเด™เตเด™เตพ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเต เดตเต†เตผเดšเตเดตเตฝ เดธเตผเดตเต€เดธเดฟเดจเตเดฑเต† เดญเดพเดฐเด‚ เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต istio.yaml:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: backend
  namespace: default
spec:
  gateways: []
  hosts:
  - "backend.default.svc.cluster.local"
  http:
  - match:
    - {}
    route:
    - destination:
        host: backend.default.svc.cluster.local
        subset: v1
        port:
          number: 80
      weight: 90
    - destination:
        host: backend.default.svc.cluster.local
        subset: v2
        port:
          number: 80
      weight: 10

เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #3: เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹

10% เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ v2-เดฒเต‡เด•เตเด•เต เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดžเด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเต.

เด˜เดŸเตเดŸเด‚ 2: 50%

เด‡เดชเตเดชเต‹เตพ เด‡เดคเต 50% เด†เดฏเดฟ เด‰เดฏเตผเดคเตเดคเดฟเดฏเดพเตฝ เดฎเดคเดฟ:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: backend
  namespace: default
spec:
...
    - destination:
        host: backend.default.svc.cluster.local
        subset: v1
        port:
          number: 80
      weight: 50
    - destination:
        host: backend.default.svc.cluster.local
        subset: v2
        port:
          number: 80
      weight: 50

เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #3: เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹

เด˜เดŸเตเดŸเด‚ 3: 100%

เด‡เดชเตเดชเต‹เตพ เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเดฏเดคเดพเดฏเดฟ เด•เดฃเด•เตเด•เดพเด•เตเด•เดพเด‚ เด•เต‚เดŸเดพเดคเต† เดŽเดฒเตเดฒเดพ เดŸเตเดฐเดพเดซเดฟเด•เตเด•เตเด‚ v2-เดฒเต‡เด•เตเด•เต เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #3: เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹

เด•เดพเดจเดฑเดฟเดฏเต† เดจเต‡เดฐเดฟเดŸเตเดŸเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต

เดžเด™เตเด™เตพ เด‡เดชเตเดชเต‹เตพ เดŽเดฒเตเดฒเดพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ 2% v10 เดฌเดพเด•เตเด•เต†เตปเดกเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดšเตเดšเตเดตเต†เดจเตเดจเต เดชเดฑเดฏเดพเด‚. เดจเดฎเตเดฎเตพ เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเต‹เดฒเต† เดŽเดฒเตเดฒเดพเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเตป v2 เดธเตเดตเดฎเต‡เดงเดฏเดพ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดฃเดฎเต†เด™เตเด•เดฟเตฝ เดŽเดจเตเดคเต เดšเต†เดฏเตเดฏเตเด‚?

HTTP เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดชเตŠเดฐเตเดคเตเดค เดจเดฟเดฏเดฎเด‚ เดšเต‡เตผเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: backend
  namespace: default
spec:
  gateways: []
  hosts:
  - "backend.default.svc.cluster.local"
  http:
  - match:
    - headers:
        canary:
          exact: "canary-tester"
    route:
    - destination:
        host: backend.default.svc.cluster.local
        subset: v2
        port:
          number: 80
      weight: 100
  - match:
    - {}
    route:
    - destination:
        host: backend.default.svc.cluster.local
        subset: v1
        port:
          number: 80
      weight: 90
    - destination:
        host: backend.default.svc.cluster.local
        subset: v2
        port:
          number: 80
      weight: 10

เด‡เดชเตเดชเต‹เตพ curl เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฎเตเด•เตเด•เต เดคเดฒเด•เตเด•เต†เดŸเตเดŸเต เด…เดฏเดšเตเดšเตเด•เตŠเดฃเตเดŸเต เด’เดฐเต v2 เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดฟเตผเดฌเดจเตเดงเดฎเดพเด•เตเด•เดพเด‚:

เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #3: เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹

เดคเดฒเด•เตเด•เต†เดŸเตเดŸเดฟเดฒเตเดฒเดพเดคเตเดค เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เด‡เดชเตเดชเต‹เดดเตเด‚ 1/10 เด…เดจเตเดชเดพเดคเดคเตเดคเดฟเตฝ เดจเดฏเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚:

เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #3: เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹

เดฐเดฃเตเดŸเต เด†เดถเตเดฐเดฟเดค เดชเดคเดฟเดชเตเดชเตเด•เตพเด•เตเด•เตเดณเตเดณ เด•เดพเดจเดฑเดฟ

เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเดฟเดจเตเด‚ เดฌเดพเด•เตเด•เต†เตปเดกเดฟเดจเตเดฎเดพเดฏเดฟ เดจเดฎเตเด•เตเด•เต เดชเดคเดฟเดชเตเดชเต v2 เด‰เดณเตเดณ เด“เดชเตเดทเตป เด‡เดชเตเดชเต‹เตพ เดžเด™เตเด™เตพ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด‚. เดฐเดฃเตเดŸเดฟเดจเตเด‚, เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเดจเตเดฑเต† 10% v2-เดฒเต‡เด•เตเด•เต เดชเต‹เด•เดฃเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟ:

เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #3: เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹

เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต v1 เด‰เด‚ v2 เด‰เด‚ 1/10 เดฌเดพเด•เตเด•เต†เตปเดกเต v1, v2 เดŽเดจเตเดจเต€ เด…เดจเตเดชเดพเดคเดคเตเดคเดฟเตฝ เดซเต‹เตผเดตเต‡เดกเต เดŸเตเดฐเดพเดซเดฟเด•เตเด•เตเด‚ เดžเด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเต.

v2-เดจเต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดฒเตเดฒเดพเดคเตเดคเดคเดฟเดจเดพเตฝ เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต-v2-เตฝ เดจเดฟเดจเตเดจเต เดฌเดพเด•เตเด•เต†เตปเดกเต-v1-เดฒเต‡เด•เตเด•เต เดฎเดพเดคเตเดฐเด‚ เดŸเตเดฐเดพเดซเดฟเด•เต เดซเต‹เตผเดตเต‡เดกเต เดšเต†เดฏเตเดฏเดฃเดฎเต†เด™เตเด•เดฟเตฝ เดŽเดจเตเดคเตเดšเต†เดฏเตเดฏเตเด‚? เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเดฟเดจเดพเดฏเดฟ 1/10 เด…เดจเตเดชเดพเดคเด‚ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเด‚, เด‡เดคเต เดšเตผเดšเตเดšเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฌเดพเด•เตเด•เต†เตปเดกเต-v2-เดฒเต‡เด•เตเด•เต เดŽเดจเตเดคเต เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดพเดฃเต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดจเตเดจเดคเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจเต. sourceLabels :

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: backend
  namespace: default
spec:
  gateways: []
  hosts:
  - "backend.default.svc.cluster.local"
  http:
...
  - match:
    - sourceLabels:
        app: frontend
        version: v2
    route:
    - destination:
        host: backend.default.svc.cluster.local
        subset: v2
        port:
          number: 80
      weight: 100

เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดžเด™เตเด™เตพเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณเดคเต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเต:

เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #3: เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹

เดฎเดพเดจเตเดตเตฝ เด•เดพเดจเดฑเดฟ เดธเดฎเต€เดชเดจเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดตเตเดฏเดคเตเดฏเดพเดธเด™เตเด™เตพ

ะ’ เด†เดฆเตเดฏ เดญเดพเด—เด‚ เดฐเดฃเตเดŸเต k8s เดตเดฟเดจเตเดฏเดพเดธเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเด‚ เดžเด™เตเด™เตพ เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ เดธเตเดตเดฎเต‡เดงเดฏเดพ เดจเดŸเดคเตเดคเดฟ. เด…เดตเดฟเดŸเต† เดžเด™เตเด™เตพ เดชเด•เตผเดชเตเดชเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เดฎเดพเดฑเตเดฑเดฟ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เด…เดจเตเดชเดพเดคเด‚ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดšเตเดšเต. เดˆ เดธเดฎเต€เดชเดจเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต, เดชเด•เตเดทเต‡ เด—เตเดฐเตเดคเดฐเดฎเดพเดฏ เดชเต‹เดฐเดพเดฏเตเดฎเด•เดณเตเดฃเตเดŸเต.

เดชเด•เตผเดชเตเดชเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เด•เดฃเด•เตเด•เดฟเดฒเต†เดŸเตเด•เตเด•เดพเดคเต† เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เด…เดจเตเดชเดพเดคเด‚ เดจเดฟเตผเดฃเตเดฃเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเต เด‡เดธเตเดคเดฟเดฏเต‹ เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เตเดจเตเดจเต. เด‡เดคเดฟเดจเตผเดคเตเดฅเด‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเดฎเตเด•เตเด•เต HPA-เด•เตพ (เดคเดฟเดฐเดถเตเดšเต€เดจ เดชเต‹เดกเต เด“เดŸเตเดŸเต‹เดธเตเด•เต†เดฏเดฟเดฒเดฑเตเด•เตพ) เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเดคเตเดคเดฟเดจเตเดฑเต† เดจเดฟเดฒเดตเดฟเดฒเต† เด…เดตเดธเตเดฅเดฏเตเด•เตเด•เต เด…เดจเตเดธเตƒเดคเดฎเดพเดฏเดฟ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒเต†เดจเตเดจเตเด‚ เด†เดฃเต.

เดซเดฒเด‚

เด‡เดธเตเดฑเตเดฑเดฟเดฏเต‹ เดฎเดฟเด•เดšเตเดš เดฐเต€เดคเดฟเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต, เด•เดฟเดฏเดพเดฒเดฟเด•เตเด•เตŠเดชเตเดชเด‚ เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดตเดณเดฐเต† เดถเด•เตเดคเดฎเดพเดฏ เด’เดฐเต เด•เต‹เดฎเตเดชเดฟเดจเต‡เดทเตป เด‰เดฃเตเดŸเดพเด•เตเด•เตเดจเตเดจเต. เดŽเดจเตเดฑเต† เดคเดพเตฝเดชเตเดชเดฐเตเดฏเด™เตเด™เดณเตเดŸเต† เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ เด…เดŸเตเดคเตเดคเดคเต เด“เดŸเตเดŸเต‹เดฎเต‡เดทเดจเตเด‚ เด•เดพเดจเดฑเดฟ เด…เดจเดฒเดฟเดฑเตเดฑเดฟเด•เตโ€Œเดธเดฟเดจเตเด‚ เดตเต‡เดฃเตเดŸเดฟ เดธเตเดชเดฟเดจเตเดจเด•เตเด•เดฑเดฟเดจเต† เด‡เดธเตโ€Œเดฑเตเดฑเดฟเดฏเต‹เดฏเตเดฎเดพเดฏเดฟ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•