Kubernetes service

쿠버네티스 서비스

Expose a stable network address in front of replaceable pods.

···
html
<div class="stage" data-phase="0"><div class="title">STABLE ADDRESS</div><div class="service panel">service.local</div><div class="fork"></div><div class="row pods"><div class="panel pod a">pod A</div><div class="panel pod b">pod B</div><div class="panel pod c">pod C</div></div><div class="sub">endpoint set follows healthy pods</div></div>
css
.stage{width:min(94vw,760px);height:min(88vh,330px);padding:clamp(9px,2.6vmin,20px);border:1px solid var(--line);border-radius:14px;background:var(--surface);font:600 clamp(12px,2.5vmin,16px)/1.3 "Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo",sans-serif;display:flex;flex-direction:column;gap:clamp(6px,1.7vmin,12px);overflow:hidden;position:relative}.stage *{min-width:0}.stage .title{color:var(--accent);font-weight:800}.stage .sub{color:var(--muted)}.stage .row{display:flex;align-items:center;gap:clamp(5px,1.6vmin,12px)}.stage .panel{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(6px,1.6vmin,12px)}.stage .mono{font-family:ui-monospace,SFMono-Regular,monospace;font-size:clamp(12px,2.5vmin,15px)}.stage .grow{flex:1}.stage .on{color:var(--accent)}.service{text-align:center;border-color:var(--accent);color:var(--accent)}.fork{height:clamp(16px,4vmin,32px);width:2px;background:var(--accent);align-self:center;position:relative}.fork:after{content:'';position:absolute;bottom:0;left:-100px;width:200px;border-top:2px solid var(--accent)}.pods{justify-content:space-around;flex:1;align-items:flex-start}.pods .pod{width:27%;text-align:center;transition:opacity .3s,transform .3s}.stage[data-phase="1"] .pod.a{color:var(--muted);border-style:dashed;transform:translateY(9px)}.stage[data-phase="2"] .pod.a{background:color-mix(in srgb,var(--accent) 15%,var(--surface))}.stage[data-phase="2"] .pod.a:after{content:' · new'}
js
const stage=document.querySelector('.stage');let phase=0;function advance(){phase=(phase+1)%3;stage.dataset.phase=String(phase)}const timer=setInterval(advance,1200);stage.addEventListener('pointerdown',()=>{clearInterval(timer);advance()})

A service selects pods by labels and provides a stable access point. Clients keep using that address even when pod IPs change after replacement.

The demo replaces one pod while requests move to another healthy endpoint. Unready pods should not receive traffic.

When to use

Use it when other services need to reach an application whose pod addresses change.

Open as page ↗