Traefik v2 to v3 migration errors fix
Traefik v3 static config இல் swarmMode அல்லது pilot இருந்தால் start ஆகாது. deprecated static option found error ஐ fix செய்த பிறகு router rules ஐ migrate செய்யவும்.
Traefik v2 மற்றும் v3 இடையே என்ன மாறுகிறது
Traefik v2 இலிருந்து v3 க்கான இடம்பெயர்வு பெரும்பாலும் ஒரு பெயர்மாற்ற வேலை. முக்கியமான மாற்றம் ipWhiteList middleware ஆனது ipAllowList என மறுபெயரிடப்படுவது ஆகும். இதைத் தவிர, v3 router rule தொடரியலை வலுவாக்குகிறது (PathPrefix தனது regex அம்சங்களை இழக்கிறது, பல matchers மறுபெயரிடப்பட்டு அல்லது நீக்கப்படுகின்றன), சில providers மற்றும் விருப்பங்களை நேரடியாக நீக்குகிறது, மீதமுள்ள அனைத்தையும் செயல்படச் செய்கிறது: entrypoints, ACME சான்றிதழ் அமைப்பு, Docker labels பணிப்பாய்வு, மற்றும் உங்கள் acme.json அனைத்தும் தொடர்ந்து செயல்படும். v3 ஆனது v2 rule தொடரியலை செயல்படச் செய்யும் இணக்கத் தன்மை பயன்முறையையும் வழங்குகிறது. எனவே நீங்கள் முதலில் binary ஐ மேம்படுத்தலாம். பின்னர் ஒரே இரவில் ஆபத்தான மாற்றத்திற்குப் பதிலாக, ஒவ்வொரு service க்கும் ஒவ்வொரு முறையாக rules ஐ மீண்டும் எழுதலாம்.
இந்த வழிகாட்டி Traefik ரிவர்ஸ் ப்ராக்ஸி வழிகாட்டி பக்கத்திலிருந்து label அடிப்படையிலான Docker Compose அமைப்பை கருதுகிறது. அந்தப் பக்கம் v3-native ஆகும்; இந்தப் பக்கம் இன்னும் traefik:v2 tag ஐ இயக்கும் சேவையகத்திற்கானது.
பெயர்மாற்றங்கள் மற்றும் நீக்கங்கள்
ipWhiteListஇப்போதுipAllowListஆகும், இது HTTP மற்றும் TCP middleware இரண்டிற்கும் பொருந்தும். உள்ளே உள்ள விருப்பங்கள் மாற்றப்படவில்லை, எனவேsourcerangeதனது சரியான பொருளைத் தக்கவைக்கிறது. தற்போதைய v3 வெளியீடுகள், v3.5 உட்பட, பழைய பெயரை deprecated alias ஆக ஏற்றுக்கொள்கின்றன, மேலும் பட்டியலை அமல்படுத்துகின்றன, எனவே இந்த பெயர்மாற்றம் மாற்றத்தின் போது எதையும் செயலிழக்கச் செய்யாது. இருப்பினும் பெயரை மாற்றுங்கள்: அந்த alias ஐ நீக்க திட்டமிடப்பட்டுள்ளது, மேலும் அது எச்சரிக்கையின்றி deprecation பட்டியலிலிருந்து அமைதியாக மறைந்துவிடும்.providers.docker.swarmMode=trueநீக்கப்பட்டது. Swarm தனது சொந்த provider ஐப் பெறுகிறது, இதுproviders.swarm.endpointஆக கட்டமைக்கப்பட்டுள்ளது.pilotபிரிவு முழுமையாக நீக்கப்பட்டது.experimental.http3நீக்கப்பட்டது. HTTP/3 entrypoint இல் நேரடியாக இயக்கப்படுகிறது.tls.caOptionalproviders இலிருந்தும் forwardAuth middleware இலிருந்தும் நீக்கப்பட்டது.- InfluxDB v1 metrics provider, Rancher provider, மற்றும் Marathon provider ஆகியவை நீக்கப்பட்டன.
- Tracing ஆனது OpenTelemetry க்கு மாற்றப்பட்டது. சிறப்பு tracing backends, அதில் Jaeger மற்றும் Zipkin integrations ஆகியவை நீக்கப்பட்டன, மேலும் v3 அதற்கு பதிலாக OTLP (OpenTelemetry protocol) ஐ ஏற்றுமது செய்கிறது.
- headers middleware இல் உள்ள deprecated
ssl*விருப்பங்கள் (sslRedirect,sslHost, மற்றும் மீதமுள்ளவை) நீக்கப்பட்டன. Entrypoint redirections மற்றும் redirectScheme middleware அவற்றை மாற்றின.
இந்த நீக்கங்கள் தோற்றத்தை விட முக்கியமானவை, ஏனெனில் Traefik தனது static configuration இல் தெரியாத விருப்பம் இருந்தால் தொடங்க மறுக்கிறது. மீதமுள்ள pilot அல்லது swarmMode வரி கொள்கலனை boot செய்யும்போது மீதமுள்ளதைக் குறிப்பிடும் incompatible deprecated static option found செய்தியுடன் நிறுத்துகிறது; Traefik கேள்விப்படாத விருப்பம் (typing mistake, அல்லது tls.caOptional) அதை field not found உடன் நிறுத்துகிறது. image tag ஐ மாற்றுவதற்கு முன்பு static configuration ஐ சுத்தம் செய்யவும்.
Traefik உண்மையில் அறியாத middleware பெயர் (typing mistake, அல்லது alias செய்யப்படாமல் நீக்கப்பட்ட பெயர்) வேறுவிதமாக தோல்வியடைகிறது: அதைக் குறிப்பிடும் router route க்கு பதிலாக பிழையுடன் ஏற்றப்படுகிறது, dashboard அதைக் குறிக்கிறது, மேலும் API middleware "offce@docker" does not exist ஐத் தெரிவிக்கிறது. அந்த hostname க்கான கோரிக்கைகள் 404 பெறுகின்றன, ஏனெனில் router ஒருபோதும் தொடங்கவில்லை. தற்போதைய v3 இல் ipwhitelist இந்த வகையில் இல்லை என்பதை கவனிக்கவும்: அது deprecated alias ஆக தப்பித்துக்கொள்கிறது, எனவே பெயர்மாற்றப்படாத label அமைதியாக வேலை செய்து கொண்டிருக்கிறது.
விதியின் தொடரியல் மாற்றங்கள்
உண்மையான மறுஎழுத்து வேலை விதிகளில் நிகழ்கிறது. v3-இல் உள்ள மாற்றங்கள்:
- matcher-களுக்குள் உள்ள மதிப்புகளைச் சூழ பேக்டிக்குகள் கட்டாயம். v2 இரட்டைப் பேர்க்களையும் ஏற்றது; v3 ஏற்றாது. எனவே Host("app.example.com") ஆனது Host(
app.example.com) ஆக மாற வேண்டும். PathPrefixஇனி சுருங்குறித் தொடர்களையோ{id}-பாணி placeholder-களையோ புரிந்துகொள்ளாது. PathPrefix(/api/{version:v[0-9]+}) போன்ற v2 விதி ஆனது Go சுருங்குறித் தொடர் தொடரியலில் எழுதப்பட்டPathRegexpmatcher ஆக மாற வேண்டும்.- matcher-கள் இப்போது ஒரே ஒரு மதிப்பை மட்டுமே ஏற்கும். v2 Host(
app.example.com,www.example.com) வடிவத்தை அனுமதித்தது; v3-க்கு Host(app.example.com) || Host(www.example.com) தேவை. விதிவிலக்குகள்Header,HeaderRegexp,Query, மற்றும்QueryRegexpஆகும். இவை இன்னும் ஒரு பெயருடன் ஒரு மதிப்பை ஏற்கும். Headersமற்றும்HeadersRegexpஆகியவைHeaderமற்றும்HeaderRegexpஎன மறுபெயரிடப்பட்டுள்ளன.HostHeaderநீக்கப்பட்டது. v3-இல் அதேயான ஒன்றை ஒப்பிடும்Host-ஐப் பயன்படுத்தவும்.- இரண்டு matcher-கள் புதியவை: ஒன்று
QueryRegexp, மற்றொன்று விதிக்குள் கிளையன்ட் முகவரியை ஒப்பிடுவதற்கானClientIP.
நல்ல செய்தி: பேக்டிக்குகளுடன் எழுதப்பட்ட சாதாரண Host(app.example.com) விதி ஏற்கனவே செல்லுபடியான v3 தொடரியல். பெரும்பாலான சிறிய Compose அமைப்புகள் அதையே பயன்படுத்துகின்றன. எனவே பெரும்பாலான லேபிள்கள் எந்த விதி திருத்தமும் இல்லாமல் இடம்பெயர்கின்றன.
தொடங்குவதற்கு முன் உங்கள் லேபிள்களை ஆய்வு செய்யவும்
ஒரே ஒரு தேடலில் உங்கள் இடப்பெயர்வின் அளவை அளவிடலாம். ஏனெனில் ஒவ்வொரு உடைக்கும் லேபிள் மாற்றமும் grep கண்டுபிடிக்கக்கூடிய ஒரு வடிவத்தை விட்டுச் செல்கிறது:
grep -rnE 'ipwhitelist|HostHeader|Headers\(|PathPrefix\(`[^`]*\{|Host\(`[^`]*`,' docker-compose*.ymlஒவ்வொரு பொருத்தமும் திருத்த வேண்டிய ஒரு வரியாகும். ipwhitelist என்பது ipallowlist ஆகிறது. HostHeader என்பது Host ஆகிறது. Headers என்பது Header ஆகிறது. PathPrefix க்குள் உள்ள {...} placeholder ஆனது PathRegexp matcher ஆகிறது. Host() க்குள் உள்ள ஒரு கமாவானது || ஆல் இணைக்கப்பட்ட இரண்டு Host() matcher ஆகிறது. பொருத்தங்கள் எதுவும் இல்லை என்றால், உங்கள் லேபிள்கள் ஏற்கனவே செல்லுபடியான v3 syntax ஆகும். இடப்பெயர்வு நிலையான உள்ளமைப்பு மற்றும் image tag ஆகியவற்றிற்கு மட்டுமே சுருக்கப்படுகிறது.
எது மாற்றமின்றி உள்ளது
என்ட்ரிபாயிண்ட்கள் மற்றும் அவற்றின் HTTP-to-HTTPS redirect, இரண்டு challenge வகைகளுடன் கூடிய ACME resolvers, exposedByDefault, router மற்றும் service labels, loadbalancer.server.port, மற்றும் dashboard ஆகிய அனைத்தும் v2-ல் எப்படி இருந்தனவோ அதேபோல v3-லும் செயல்படுகின்றன. உங்கள் certகளும் கூட மாற்றமின்றி தொடர்கின்றன, ஏனெனில் v3 ஆனது v2 எழுதிய acme.json-ஐ தொடர்ந்து படிக்கிறது. ஆயினும் நீங்கள் தொடங்குவதற்கு முன் அந்த கோப்பை கட்டாயம் backup செய்யுங்கள், ஏனெனில் அதை இழக்கும் rollback ஆனது நேரடியாக Let's Encrypt-ன் duplicate-certificate rate limit-ஐ தூண்டுகிறது:
cp ./letsencrypt/acme.json ./letsencrypt/acme.json.v2-backupஇடம்பெயல் பாதை
படி 1: இன்று நீங்கள் இயக்குவதை பொருத்துங்கள். உங்கள் தற்போதைய வெளியீட்டிற்கு ஏற்ப traefik:latest அல்லது traefik:v2 குறியீட்டை மாற்றுங்கள், உதாரணமாக traefik:v2.11, மேலும் முழு compose கோப்புறையையும் git-இல் சமர்ப்பிக்கவும். அடுத்த ஒவ்வொரு படியும் checkout மூலம் மீளக்கூடியதாக மாறும். docker compose up -d <service> கொண்டு ஒரு சேவையை மறுஉருவாக்கம் செய்வது இன்னும் உங்களுக்கு பழக்கமாகவில்லை என்றால், Docker Compose அடிப்படை வழிகாட்டி இந்த இடம்பெயல் சார்ந்த செயல்பாடுகளை விளக்குகிறது.
படி 2: நிலையான உள்ளமைவை சுத்தம் செய்து இணக்க முறையை இயக்கவும். v3 கைவிட்ட ஒவ்வொரு விருப்பத்தையும் நீக்கவும் (pilot, swarmMode, tls.caOptional, experimental.http3), பின்னர் v3-ஐ v2 தொடரியலாக விதிகளை இயல்பாகக் கருதச் சொல்லவும். traefik.yml-ல்:
core:
defaultRuleSyntax: v2அல்லது compose command: பட்டியலில் ஒரு flag ஆக: --core.defaultRuleSyntax=v2. இணக்க முறை விதி தொடரியலை மட்டுமே கட்டுப்படுத்துகிறது. இது நீக்கப்பட்ட விருப்பங்களை மீண்டும் கொண்டுவராது, மேலும் இது middlewares-ஐ உங்களுக்காக மறுபெயரிடாது.
படி 3: middleware மறுபெயரிடல்களை தயார் செய்யவும். உங்கள் compose கோப்புகளில் பழைய பெயர்களுக்காகத் தேடவும்: grep -rn ipwhitelist docker-compose*.yml. ஒவ்வொரு ipwhitelist லேபிளையும் ipallowlist ஆகத் திருத்தவும், ஆனால் மாற்றத்தை இன்னும் பயன்படுத்த வேண்டாம், ஏனெனில் புதிய பெயர் v2-ல் இல்லை. இந்தத் திருத்தங்கள் அடுத்த படியில் மாற்றத்துடன் சேர்த்து வெளியிடப்படும். (ஒன்று தவறவிடப்பட்டால், தற்போதைய v3 பழைய பெயரை deprecated alias ஆக ஏற்கிறது, எனவே பட்டியல் செயல்படுவதைத் தொடரும்; காலை 2 மணிக்கு அதை சரிசெய்வதற்குப் பதிலாக அடுத்த சுற்றில் சரிசெய்யவும்.)
படி 4: image குறியீட்டை மாற்றவும். Traefik image-ஐ தற்போதைய v3 வெளியீட்டிற்கு அமைக்கவும், எழுதும் போது traefik:v3.5, பின்னர்:
docker compose up -d
docker compose logs -f traefikஇணக்க முறை இயங்குவதால், உங்கள் v2 விதிகள் தொடர்ந்து பொருந்துகின்றன, மேலும் up -d நீங்கள் மறுபெயரிட்ட middleware லேபிள்களைக் கொண்ட சேவைகளையும் மறுஉருவாக்கம் செய்ததால், அந்த routers சுத்தமாக எழுகின்றன. ஆரோக்கியமான பதிவில் field not found வரி இருக்காது மற்றும் does not exist வரி இருக்காது.
இந்தப் படி திறக்கும் இடைவெளியைப் பற்றி நீங்களே நேர்மையாக இருங்கள். v3 உண்மையில் அறியாத ஒரு middleware பெயரை (ஒரு எழுத்துப்பிழை, அல்லது நீக்கப்பட்ட விருப்பம்) குறிப்பிடும் ஒரு router, புதிய Traefik தொடங்கும் நொடி முதல் அதன் app container மறுஉருவாக்கம் செய்யப்படும் வரை செயலிழக்கிறது, இது ஒரு பெட்டியில் docker compose up -d பட்டியலின் வழியாகச் செல்ல எடுத்துக்கொள்ளும் சில நொடிகள் ஆகும். ஒரு route உண்மையில் சிறிது கூட செயலிழக்க முடியாது என்றால், மாற்றத்திற்கு முன்பு அந்த router-ன் middlewares லேபிளிலிருந்து மறுபெயரிடப்பட்ட middleware-ஐ நீக்கவும், பின்னர் மீண்டும் சேர்க்கவும், மேலும் இடைப்பட்ட நிமிடத்தில் அந்த route அதன் IP allow list இல்லாமல் இயங்க முடியுமா என்பதை முன்கூட்டியே தீர்மானிக்கவும்.
படி 5: விதிகளை சேவை வாரியாக இடம்பெயரவும். ஒரு நேரத்தில் ஒரு app-ஐ வைத்து வேலை செய்யவும்: அதன் விதியை v3 தொடரியலுக்கு மாற்றி எழுதவும், அந்த சேவையை மட்டும் docker compose up -d app கொண்டு மறுஉருவாக்கம் செய்யவும், மேலும் அடுத்ததற்குச் செல்வதற்கு முன்பு அதைச் சோதிக்கவும். ஒரு சேவையில் நீங்கள் இன்னும் மாற்றி எழுத முடியாத ஒரு விதி இருந்தால், அந்த ஒற்றை router-க்கு தப்பிக்கும் வழி லேபிள் traefik.http.routers.app.ruleSyntax=v2 கொடுத்து தொடரவும்.
படி 6: இணக்க முறையை அணைக்கவும். ஒவ்வொரு விதியும் v3 தொடரியலில் இருக்கும்போது, defaultRuleSyntax மற்றும் ஏதேனும் ruleSyntax லேபிள்களை நீக்கவும், Traefik-ஐ மறுதொடக்கம் செய்யவும், மேலும் ஒவ்வொரு router-ம் dashboard-ல் இன்னும் பச்சையாகக் காட்டுகிறதா என்பதை உறுதிப்படுத்தவும். இணக்க முறை இயங்கியபடியே திருப்தி அடைய வேண்டாம்: Traefik இரண்டு விருப்பங்களையும் v3.4-ல் deprecated செய்தது மேலும் அடுத்த முக்கிய பதிப்பில் அவற்றை நீக்குகிறது, எனவே அவை ஒரு பாலம், சேருமிடம் அல்ல.
மாற்றத்திற்கு முன்னும் பின்னும்: ஒரு சேவையின் லேபிள்கள்
ஒரே சமயத்தில் ஒவ்வொரு பிரபலமான மாற்றத்தையும் கொண்ட ஒரு ஆப் இங்கே உள்ளது: ஒரு பல-மதிப்பு Host, ஒரு PathPrefix பிளேஸ்ஹோல்டர், மற்றும் ஒரு ipWhiteList மிடில்வேர். v2 தொகுதி:
app:
image: app:1.4
restart: unless-stopped
networks:
- proxy
labels:
- traefik.enable=true
- traefik.http.routers.app.rule=Host(`app.example.com`,`www.example.com`) && PathPrefix(`/api/{version:v[0-9]+}`)
- traefik.http.routers.app.entrypoints=websecure
- traefik.http.routers.app.tls.certresolver=le
- traefik.http.routers.app.middlewares=office
- traefik.http.middlewares.office.ipwhitelist.sourcerange=10.0.0.0/24
- traefik.http.services.app.loadbalancer.server.port=8080அதே சேவை v3-க்கு இடம்பெயர்ந்த நிலை:
app:
image: app:1.4
restart: unless-stopped
networks:
- proxy
labels:
- traefik.enable=true
- traefik.http.routers.app.rule=(Host(`app.example.com`) || Host(`www.example.com`)) && PathRegexp(`^/api/v[0-9]+`)
- traefik.http.routers.app.entrypoints=websecure
- traefik.http.routers.app.tls.certresolver=le
- traefik.http.routers.app.middlewares=office
- traefik.http.middlewares.office.ipallowlist.sourcerange=10.0.0.0/24
- traefik.http.services.app.loadbalancer.server.port=8080இரண்டு லேபிள்கள் மாறின. இந்த விதி அதன் பல-மதிப்பு Host-ஐ || ஆல் இணைக்கப்பட்ட இரண்டு மேட்சர்களாகப் பிரித்தது. பிளேஸ்ஹோல்டரை PathRegexp ஆல் மாற்றியது. மிடில்வேர் லேபிள் ipwhitelist-ஐ ipallowlist ஆல் மாற்றியது. என்ட்ரிபாயிண்ட், சர்ட்டிபிகேட் ரெஸால்வர், ரூட்டர்-டு-மிடில்வேர் வயரிங், மற்றும் சேவை போர்ட் ஆகியவை மாற்றப்படவில்லை.
ஒவ்வொரு சேவையையும் டாஷ்போர்டுடன் சோதிக்கவும்
ஒவ்வொரு மாற்றத்திற்குப் பிறகும், டாஷ்போர்டின் HTTP routers பக்கத்தைத் திறக்கவும். ஒவ்வொரு router-ம் பச்சை நிறத்தில் இருக்க வேண்டும். பிழை பேட்ஜ் கொண்ட ஒரு router அதன் சரியான பிரச்சினையைக் குறிப்பிடும்; இது பொதுவாக புதிய பெயரின் கீழ் இல்லாத ஒரு middleware ஆகவோ அல்லது v3 பார்ஸ் செய்ய முடியாத ஒரு rule ஆகவோ இருக்கும். பிறகு வெளியில் இருந்து, ஒரு நேரத்தில் ஒரு hostname உறுதிப்படுத்தவும்:
curl -sI https://app.example.com/api/v1/statusஒரு 200 அல்லது உங்கள் ஆப்பின் சாதாரண redirect என்பது routing மற்றும் TLS இரண்டும் தப்பிப்பிழைத்ததைக் குறிக்கிறது. Traefik-இல் இருந்து ஒரு 404 என்பது router எழுச்சியடையவில்லை என்பதைக் குறிக்கிறது; டாஷ்போர்டுக்குத் திரும்பி அதன் பிழையைப் படிக்கவும். நீங்கள் வேலை செய்யும்போது இரண்டாவது terminal-ல் docker compose logs -f traefik-ஐ திறந்தே வைத்திருக்கவும், ஏனெனில் ஒரு container மறுதொடக்கமான அந்தக் கணமே ஒவ்வொரு பார்ஸிங் தோல்வியும் அங்கு வந்து சேரும்.
பின்னடைவு வெளிப்படைத்தன்மை
ஒவ்வொரு சேவையும் v3-இல் இயங்கத் தொடங்கி, உண்மையாகச் சோதிக்கப்படும் வரை v2 compose கோப்பையும், அதன் நிலையான உள்ளமைவையும், acme.json காப்புப் பிரதியையும் வைத்திருக்கவும். பின்னடைவு என்பது இடம்பெயர்வுக்கு முந்தைய commit-ஐ எடுத்து docker compose up -d-ஐ இயக்குவதாகும். இது முழு கோப்பாக இருக்க வேண்டும்; வெறும் image tag மட்டும் போதாது. ஏனெனில் v3-க்கு மட்டுமேயான labels v2-க்கு கீழ் தவறானவை, அதேபோல v2 labels v3-க்கு கீழ் தவறானவை: ipallowlist என்பது v2-இல் இல்லை, மேலும் PathRegexp matcher அங்கு parse ஆகாது. வழியில் acme.json இழந்து அல்லது சேதமடைந்திருந்தால், v2-ஐ தொடங்குவதற்கு முன் காப்புப் பிரதியை மீட்டெடுக்கவும். இல்லையெனில், பின்னடைவு ஒரே நேரத்தில் ஐந்து சான்றிதழ்களை மீண்டும் வழங்குவதற்காக உங்கள் Let's Encrypt வீத வரம்பைத் தீர்த்துவிடும்.
FAQ
Traefik v3-க்கு ஒவ்வொரு router rule-ஐயும் நான் மறுபடியும் எழுத வேண்டுமா?
இல்லை. Backtick-இல் எழுதப்பட்ட ஒரு சாதாரண Host(app.example.com) rule இரண்டு version-களிலும் செல்லுபடியாகும். இது பெரும்பாலான Compose setup-களை உள்ளடக்கியது. ஒரு rule v2-க்கு மட்டுமேயான அம்சங்களைப் பயன்படுத்திய போது மட்டுமே மறுபடியும் எழுத வேண்டும்: Path மற்றும் PathPrefix-க்குள் regex அல்லது placeholder-கள், ஒரே Host()-க்குள் பல hostname-கள், backtick-க்குப் பதிலாக quote-கள், அல்லது நீக்கப்பட்ட Headers, HeadersRegexp, மற்றும் HostHeader matcher-கள்.
Traefik v3-இல் ipWhiteList-க்கு என்ன நடந்தது?
அது ipAllowList என மறுபெயரிடப்பட்டது. உள்ளே உள்ள configuration மாற்றப்படவில்லை. எனவே traefik.http.middlewares.office.ipwhitelist.sourcerange=10.0.0.0/24 போன்ற ஒரு v2 label, அதில் ipallowlist இருக்கும் அதே வரியாக மாறுகிறது. தற்போதைய v3 release-கள், v3.5 உட்பட, பழைய பெயரை deprecated alias ஆக இன்னும் ஏற்றுக்கொள்கின்றன. எனவே பெயர் மாற்றப்படாத ஒரு label allowlist-ஐ அமைதியாக செயல்படுத்திக்கொண்டே இருக்கும். இதை பெயர் மாற்றத்தைத் தவிர்ப்பதற்கான காரணமாக கருதாமல், தற்காலிக அவகாசமாகக் கருதுங்கள்: அந்த alias நீக்கப்படத் திட்டமிடப்பட்டுள்ளது. Traefik உண்மையில் அறியாத ஒரு middleware பெயர் அமைதியாக தோல்வியடைவதற்குப் பதிலாக, router error மற்றும் 404 உடன் உரத்து தோல்வியடைகிறது. Dashboard அந்த error-ஐ காட்டுகிறது. அந்த hostname-க்கான request-கள் 404 ஐத் திருப்பித் தருகின்றன.
Traefik v3 இன்னும் v2 rule syntax-ஐ படிக்க முடியுமா?
ஆம். நீங்கள் migrate செய்யும் போது v2 syntax-ஐ default ஆக வைத்திருக்க static configuration-இல் core.defaultRuleSyntax: v2-ஐ அமைக்கவும். நீங்கள் default-ஐ மீண்டும் மாற்றிய பிறகு, தனிப்பட்ட எஞ்சியவற்றுக்கு per-router ruleSyntax=v2 label-ஐ பயன்படுத்துங்கள். இரண்டையும் தற்காலிகமாகக் கருதுங்கள்: Traefik அவற்றை v3.4-இல் deprecated செய்தது. அடுத்த major version-இல் அவற்றை நீக்கிவிடும்.
எனது Let's Encrypt certificate-கள் upgrade-ஐ தப்பிப்பிழைக்குமா?
ஆம். Traefik v3, v2 எழுதிய acme.json file-ஐ தொடர்ந்து படிக்கிறது. எனவே binary மாறியது என்பதற்காக மட்டும் certificate-கள் மறுபடியும் issue செய்யப்படுவதில்லை. ஆயினும் நீங்கள் தொடங்குவதற்கு முன் அந்த file-ஐ பாதுகாப்பான இடத்தில் copy செய்து வையுங்கள். ஏனெனில் rollback அல்லது acme.json-ஐ இழக்கும் ஒரு நீக்கப்பட்ட volume, ஒரே நேரத்தில் ஒவ்வொரு certificate-ஐயும் மறுபடியும் issue செய்யக் கட்டாயப்படுத்துகிறது. Let's Encrypt ஒரே hostname-களின் தொகுப்புக்கு ஒரு வாரத்திற்கு ஐந்து duplicate certificate-களை மட்டுமே அனுமதிக்கிறது.
upgrade-க்குப் பிறகு Traefik v3 தொடங்கத் தவறுவது ஏன்?
பெரும்பாலும் static configuration-இல் v3 நீக்கிய ஒரு option இன்னும் இருப்பதால் தான். அது அறியாத option-களில் Traefik தொடங்க மறுக்கிறது. நன்கு அறியப்பட்ட எஞ்சியவற்றுக்கு (pilot, providers.docker.swarmMode, experimental.http3) log incompatible deprecated static option found எனக் கூறி குற்றவாளியைப் பெயரிடுகிறது. v3 கேள்விப்பட்டதே இல்லாத எதற்கும், உதாரணமாக tls.caOptional, அது node-உடன் field not found எனக் கூறுகிறது. ஒவ்வொன்றையும் நீக்கவும் அல்லது மாற்றவும். பிறகு container-ஐ மறுபடியும் தொடங்கவும்.