K8s 서비스 검색 및 DNS
Kubernetes가 서비스 간 통신을 위해 서비스 검색과 DNS 확인을 처리하는 방식을 살펴봅니다.
K8s 서비스 검색 및 DNS은(는) CoddyKit의 무료 Docker & Kubernetes for Developers 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Docker & Kubernetes for Developers 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Docker & Kubernetes for Developers 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
Intro to Service Discovery
Welcome to Service Discovery & DNS in K8s! In a dynamic Kubernetes cluster, Pods are constantly created, destroyed, and moved, leading to ever-changing IP addresses.
How do applications running in one Pod find and communicate with applications in another Pod or Service?
This is where Service Discovery comes in. It's how services find each other without needing to know their specific, ephemeral IP addresses.
The Role of DNS in K8s
You might already know about DNS (Domain Name System) on the internet. It translates human-readable names like google.com into IP addresses.
Kubernetes uses a similar concept internally. Instead of relying on unstable Pod IPs, K8s assigns stable DNS names to its Services.
This allows your applications to connect to other services using simple, consistent names.
CoreDNS: The K8s DNS Server
Every Kubernetes cluster comes with its own DNS server, typically CoreDNS (or sometimes kube-dns in older versions).
CoreDNS runs as a Pod within your cluster and is responsible for resolving all internal Kubernetes service names to their corresponding cluster IP addresses.
It's automatically configured for you when you set up your cluster.
How Pods Get DNS Config
When a Pod starts, Kubernetes automatically injects DNS configuration into it.
- Each Pod's
/etc/resolv.conffile is updated to point to the cluster's CoreDNS Service IP. - It also includes search paths, allowing you to use shorter service names.
This means any application inside a Pod can immediately use the cluster's DNS for name resolution.
Service DNS Names
When you create a Kubernetes Service (e.g., a ClusterIP Service), CoreDNS automatically creates a DNS record for it.
The most common format for a Service's DNS name within its own namespace is simply: <service-name>.
For example, a service named my-web-app in the default namespace can be reached by other Pods in the same namespace using just my-web-app.
Example: Same-Namespace Access
Let's say you have a deployment hello-app and a service hello-service in the default namespace. Any other Pod in default can reach it via hello-service.
Here's a simple example of a Deployment and Service:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-app
spec:
selector:
matchLabels:
app: hello
replicas: 1
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello-container
image: busybox
command: ["sh", "-c", "while true; do echo Hello K8s; sleep 5; done"]
---
apiVersion: v1
kind: Service
metadata:
name: hello-service
spec:
selector:
app: hello
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIPTesting Same-Namespace DNS
After applying the YAML from the previous scene, you can test service discovery. First, create a temporary Pod (e.g., debug-pod) in the same namespace.
Then, exec into debug-pod and try to ping the service:
kubectl run debug-pod --image=busybox --restart=Never --rm -it --command -- sh- Inside the pod:
ping hello-service
You should see the hello-service ClusterIP being resolved!
Cross-Namespace DNS (FQDN)
What if your services are in different namespaces? Kubernetes uses a Fully Qualified Domain Name (FQDN) format:
<service-name>.<namespace-name>.svc.cluster.local
For convenience, if the Pod's namespace is in its DNS search path (which it usually is), you can often use a shorter form:
<service-name>.<namespace-name>
This allows clear and unambiguous communication across different parts of your application.
Example: Cross-Namespace Access
Let's imagine a backend-service in the prod namespace. From a Pod in the default namespace, you'd access it like this:
ping backend-service.prodKubernetes DNS handles the resolution, directing traffic to the correct service, even across namespaces.
This provides strong isolation while still enabling communication where needed.
Quick Check
Which of the following statements are TRUE regarding Kubernetes Service Discovery and DNS?
Recap: Service Discovery & DNS
Great job! In this lesson, you learned how Kubernetes handles service discovery and DNS resolution for internal communication:
- Pods have ephemeral IPs, requiring a stable discovery mechanism.
- CoreDNS is the cluster's internal DNS server.
- Services get stable DNS names, resolvable by other Pods.
- Pods are automatically configured to use the cluster's DNS.
- You can access services in the same namespace by name or in other namespaces using FQDNs.
This powerful system ensures your applications can always find each other reliably!
AI 튜터와 함께 Docker & Kubernetes for Developers을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 12
- 레슨
- 48
자주 묻는 질문
“K8s 서비스 검색 및 DNS” 강의는 무료인가요?
네 — “K8s 서비스 검색 및 DNS” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Docker & Kubernetes for Developers 강의 전체를 잠금 해제할 수 있습니다. Docker & Kubernetes for Developers 강의에는 총 4개의 강의가 포함되어 있습니다.
“K8s 서비스 검색 및 DNS”에서 뭘 배우나요?
Kubernetes가 서비스 간 통신을 위해 서비스 검색과 DNS 확인을 처리하는 방식을 살펴봅니다. 브라우저에서 직접 실행하는 실습 코드로 Docker & Kubernetes for Developers을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Docker & Kubernetes for Developers을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Docker & Kubernetes for Developers은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“K8s 서비스 검색 및 DNS” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Docker & Kubernetes for Developers 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Docker & Kubernetes for Developers 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Kubernetes Ingress 및 라우팅
- 네트워크 정책 구현
- K8s 서비스 검색 및 DNS
- TLS 종료 및 HTTPS로 Ingress 보호하기