[쿠버네티스 네트워크] ClusterIP를 활용한 외부 통신 엔드포인트 실습

IMKUNYOUNG·2023년 7월 25일
0

쿠버네티스

목록 보기
34/64

엔드포인트 역할

  • 쿠버네티스의 서비스 기능을 사용하면 외부 서비스와 연결 가능
  • 외부 서비스와 연결을 수행할 때는 서비스의 endpoint를 레이블을 사용해 지정하는 것이 아니라 외부 IP를 직접 endpoint라는 별도의 자원에서 설정

레이블이 없는 서비스

  • 다음 도큐먼트에는 이런 레이블이 없는 서비스를 사용하는 사례

    https://kubernetes.io/docs/concepts/services-networking/service/

  • 프로덕션 환경에서는 외부 데이터베이스 클러스터를 원하지만 테스트 환경에서는 자체 데이터베이스를 사용하는 경우

  • 서비스가 다른 네임스페이스 또는 다른 클러스터의 서비스를 가리키는 경우

  • 워크로드를 Kubernetes로 마이그레이션하는 경우 (접근 방식을 평가하는 동안 쿠버네티스에서 백엔드의 일부 서비스만 실행)

  • 서비스와 엔드포인트 리소스 모두 생성 필요


엔드포인트 실습

  • 엔드포인트를 활용해 naver.com과 malware-traffic-analysis.net으로 연결하는 서비스를 구성
  • nslookup 명령을 사용해 naver.com과 malware-traffic-analysis.net에 대한 ip 주소를 가져옴

  • 다음과 같이 서비스와 엔드포인트 yaml을 생성하고 적용하자.

  • curl로 my-service를 요청하면 다음과 같이 두 사이트에 접근하는 모습을 보여준다.



nano my-service-endpoints.yaml
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
---
apiVersion: v1
kind: Endpoints
metadata:
  name: my-service
subsets:
  - addresses:
      - ip: 223.130.195.200
      - ip: 199.201.110.204
    ports:
      - port: 80
kubectl apply -f my-service-endpoints.yaml
imkunyoung@cloudshell:~/kubeservice (k8s-inflearn)$ kubectl describe svc my-service
Name:              my-service
Namespace:         default
Labels:            <none>
Annotations:       cloud.google.com/neg: {"ingress":true}
Selector:          <none>
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.108.2.92
IPs:               10.108.2.92
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         223.130.195.200:80,199.201.110.204:80
Session Affinity:  None
Events:            <none>
kubectl run http-go --image=gasbugs/http-go
kubectl exec -it http-go -- bash
root@http-go:/usr/src/app# curl my-service
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://www.malware-traffic-analysis.net/">here</a>.</p>
<hr>
<address>Apache/2.4.52 (Ubuntu) Server at my-service Port 80</address>
</body></html>


root@http-go:/usr/src/app# curl my-service
<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center> NWS </center>
</body>
</html>
imkunyoung@cloudshell:~ (k8s-inflearn)$ kubectl run -it --rm --image=busybox bash
/ # wget -O- my-service
Connecting to my-service (10.108.2.92:80)
Connecting to www.malware-traffic-analysis.net (199.201.110.204:443)

0개의 댓글