반응형

 

 

 

서비스

  • Pod에서 실행중인 애플리케이션을 서로 통신하게 만들어주는 역활
  • 쿠버네티스는 Pod에게 고유한 IP 주소와 Pod 집합에 대한 단일 DNS 명을 부여하고, 그것들 간에 로드밸런싱을 수행할 수 있다

 

 

서비스 리소스

  • 쿠버네티스에서 Service는 Pod의 논리적으로 분리된 집합과 그 집합에 접근할 수 있는 정책을 정의하는 개념이다. (때로는 이 패턴을 마이크로-서비스라고 한다.)
  • 서비스가 대상으로 하는 파드 집합은 일반적으로 Selector가 결정한다. 서비스 엔드포인트를 정의하는 다른 방법에 대한 자세한 내용은 셀렉터가 없는 서비스를 참고한다.

 

서비스 정의

  • 쿠버네티스의 서비스는 파드와 비슷한 REST 오브젝트이다.
  • 모든 REST 오브젝트와 마찬가지로, 서비스 정의를 API 서버에 POST하여 새 인스턴스를 생성할 수 있다.
  • 서비스 오브젝트의 이름은 유효한 RFC 1035 레이블 이름이어야 한다.

 

 

 

 

Service 연동

# 먼저 nginx를 띄울 pod를 생성해줍니다.
jinsu@jinsu:~$ kubectl run mynginx --image nginx --restart Never
pod/mynginx created
jinsu@jinsu:~$ 
jinsu@jinsu:~$ kubectl get pod
NAME      READY   STATUS    RESTARTS   AGE
mynginx   1/1     Running   0          6s
jinsu@jinsu:~$

# Service를 만든 후 실행
jinsu@jinsu:~$ cat Service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: mynginx
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: mynginx
jinsu@jinsu:~$ 

jinsu@jinsu:~$ kubectl apply -f Service.yaml 
service/mynginx unchanged
jinsu@jinsu:~$

# mynginx 서비스가 잘 동작중인걸 확인
jinsu@jinsu:~$ kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.43.0.1      <none>        443/TCP   144m
mynginx      ClusterIP   10.43.42.124   <none>        80/TCP    32m
jinsu@jinsu:~$

# client pod에 들어가 dns를 설치
jinsu@jinsu:~$ kubectl exec -it client -- bash
root@client:/# apt update && apt install -y dnsutils

# nslookup을 해보면 mynginx를 만들었던 pod의 dns가 보이는 걸 확인
root@client:/# nslookup mynginx
Server:         10.43.0.10
Address:        10.43.0.10#53

Name:   mynginx.default.svc.cluster.local
Address: 10.43.42.124

root@client:/# nslookup mynginx.default
Server:         10.43.0.10
Address:        10.43.0.10#53

Name:   mynginx.default.svc.cluster.local
Address: 10.43.42.124

root@client:/#

# nginx 동작 확인
root@client:/# curl mynginx
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@client:/#

 

 

 

 

 

 

 

 

 

서비스 타입 (ServiceTypes)

Pod내의 애플리케이션 중 일부는 서비스를 클러스터 밖에 위치한 외부 IP 주소에 노출하고 싶은 경우가 있을 것이다.

쿠버네티스 ServiceTypes는 원하는 서비스 종류를 지정할 수 있도록 해준다. 기본 값은 ClusterIP이다.

 

Type 값과 그 동작은 다음과 같다.

  • ClusterIP - 서비스를 클러스터-내부 IP에 노출시킨다. 이 값을 선택하면 클러스터 내에서만 서비스에 도달할 수 있다. 이것은 ServiceTypes의 기본 값이다.
  • NodePort - 고정 포트 (NodePort)로 각 노드의 IP에 서비스를 노출시킨다. NodePort 서비스가 라우팅되는 ClusterIP 서비스가 자동으로 생성된다. <NodeIP>:<NodePort>를 요청하여, 클러스터 외부에서 NodePort 서비스에 접속할 수 있다.
  • LoadBalancer - 클라우드 공급자의 로드 밸런서를 사용하여 서비스를 외부에 노출시킨다. 외부 로드 밸런서가 라우팅되는 NodePort와 ClusterIP 서비스가 자동으로 생성된다.
  • ExternalName - 값과 함께 CNAME 레코드를 리턴하여, 서비스를 externalName 필드의 콘텐츠 (예:foo.bar.example.com)에 매핑한다. 어떤 종류의 프록시도 설정되어 있지 않다.
참고: ExternalName 유형을 사용하려면 kube-dns 버전 1.7 또는 CoreDNS 버전 1.7 이상이 필요하다.

인그레스를 사용하여 서비스를 노출시킬 수도 있다. 인그레스는 서비스 유형이 아니지만, 클러스터의 진입점 역할을 한다. 동일한 IP 주소로 여러 서비스를 노출시킬 수 있기 때문에 라우팅 규칙을 단일 리소스로 통합할 수 있다.

 

NodePort 유형

type 필드를 NodePort로 설정하면, 쿠버네티스 컨트롤 플레인은 --service-node-port-range 플래그로 지정된 범위에서 포트를 할당한다 (기본값 : 30000-32767). 각 노드는 해당 포트 (모든 노드에서 동일한 포트 번호)를 서비스로 프록시한다. 서비스는 할당된 포트를 .spec.ports[*].nodePort 필드에 나타낸다.

 

포트를 프록시하기 위해 특정 IP를 지정하려면, kube-proxy에 대한 --nodeport-addresses 플래그 또는 kube-proxy 구성 파일의 동등한 nodePortAddresses 필드를 특정 IP 블록으로 설정할 수 있다.

 

이 플래그는 쉼표로 구분된 IP 블록 목록(예: 10.0.0.0/8, 192.0.2.0/25)을 사용하여 kube-proxy가 로컬 노드로 고려해야 하는 IP 주소 범위를 지정한다.

 

예를 들어, --nodeport-addresses=127.0.0.0/8 플래그로 kube-proxy를 시작하면, kube-proxy는 NodePort 서비스에 대하여 루프백(loopback) 인터페이스만 선택한다. --nodeport-addresses의 기본 값은 비어있는 목록이다. 이것은 kube-proxy가 NodePort에 대해 사용 가능한 모든 네트워크 인터페이스를 고려해야 한다는 것을 의미한다. (이는 이전 쿠버네티스 릴리스와도 호환된다).

 

특정 포트 번호를 원한다면, nodePort 필드에 값을 지정할 수 있다. 컨트롤 플레인은 해당 포트를 할당하거나 API 트랜잭션이 실패했다고 보고한다. 이는 사용자 스스로 포트 충돌의 가능성을 고려해야 한다는 의미이다. 또한 NodePort 사용을 위해 구성된 범위 내에 있는, 유효한 포트 번호를 사용해야 한다.

 

NodePort를 사용하면 자유롭게 자체 로드 밸런싱 솔루션을 설정하거나, 쿠버네티스가 완벽하게 지원하지 않는 환경을 구성하거나, 하나 이상의 노드 IP를 직접 노출시킬 수 있다.

 

이 서비스는 <NodeIP>:spec.ports[*].nodePort와 .spec.clusterIP:spec.ports[*].port로 표기된다. kube-proxy에 대한 --nodeport-addresses 플래그 또는 kube-proxy 구성 파일의 동등한 필드가 설정된 경우, <NodeIP> 는 노드 IP를 필터링한다.

 

Service IP 서비스

# mynginx IP로 서비스를 연동
jinsu@jinsu:~$ kubectl get pod -owide
NAME      READY   STATUS             RESTARTS   AGE    IP           NODE     NOMINATED NODE   READINESS GATES
mynginx   1/1     Running            0          103m   10.42.0.15   master   <none>           <none>
busybox   1/1     Running            0          12m    10.42.0.20   master   <none>           <none>
curl      0/1     CrashLoopBackOff   7          14m    10.42.0.19   master   <none>           <none>
jinsu@jinsu:~$ 

# args 부분에 연동할 pod의 IP를 입력
jinsu@jinsu:~$ cat curl.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: curl
spec:
  containers:
  - name: curl
    image: curlimages/curl
    command: ["curl"]
    args: ["10.42.0.15"]
jinsu@jinsu:~$

# pod를 생성
insu@jinsu:~$ kubectl apply -f curl.yaml 
pod/curl created
jinsu@jinsu:~$ 

# logs로 확인했을때 nginx 와 통신 확인
jinsu@jinsu:~$ kubectl get pod
NAME      READY   STATUS             RESTARTS   AGE
mynginx   1/1     Running            0          82m
curl      0/1     CrashLoopBackOff   1          12s
jinsu@jinsu:~$ kubectl logs curl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   615  100   615    0     0  1918k      0 --:--:-- --:--:-- --:--:--  600k

# nginx pod에도 연결 확인
jinsu@jinsu:~$ kubectl logs mynginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/08/14 04:52:51 [notice] 1#1: using the "epoll" event method
2022/08/14 04:52:51 [notice] 1#1: nginx/1.23.1
2022/08/14 04:52:51 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2022/08/14 04:52:51 [notice] 1#1: OS: Linux 4.15.0-191-generic
2022/08/14 04:52:51 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/08/14 04:52:51 [notice] 1#1: start worker processes
2022/08/14 04:52:51 [notice] 1#1: start worker process 32
2022/08/14 04:52:51 [notice] 1#1: start worker process 33
2022/08/14 04:52:51 [notice] 1#1: start worker process 34
2022/08/14 04:52:51 [notice] 1#1: start worker process 35
10.42.0.16 - - [14/Aug/2022:04:56:07 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.84.0-DEV" "-"
10.42.0.16 - - [14/Aug/2022:04:56:10 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.84.0-DEV" "-"

 

Cluster IP 서비스

# Service.yaml 파일 생성 ClusterIP를 입력안할경우 delfault로 적용
jinsu@jinsu:~$ cat Service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: mynginx
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: mynginx
jinsu@jinsu:~$

# Service 생성 및 상태확인
jinsu@jinsu:~$ kubectl apply -f Service.yaml 
service/mynginx unchanged
jinsu@jinsu:~$ kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.43.0.1      <none>        443/TCP   4h45m
mynginx      ClusterIP   10.43.42.124   <none>        80/TCP    173m
jinsu@jinsu:~$

# Service CLUSTER-IP를 입력해서 연동
jinsu@jinsu:~$ cat curl.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: curl
spec:
  containers:
  - name: curl
    image: curlimages/curl
    command: ["curl"]
    args: [ "10.43.42.124" ]                                                                    
jinsu@jinsu:~$

# curl 생성 및 상태 확인
jinsu@jinsu:~$ kubectl apply -f curl.yaml 
pod/curl created
jinsu@jinsu:~$ kubectl get pod
NAME      READY   STATUS             RESTARTS   AGE
mynginx   1/1     Running            0          89m
curl      0/1     CrashLoopBackOff   1          12s
jinsu@jinsu:~$

# curl logs 확인시 통신 확인
jinsu@jinsu:~$ kubectl logs curl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   615  100   615    0     0   523k      0 --:--:-- --:--:-- --:--:--  600k

# nginx logs 확인시 통신 확인
jinsu@jinsu:~$ kubectl logs mynginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/08/14 04:52:51 [notice] 1#1: using the "epoll" event method
2022/08/14 04:52:51 [notice] 1#1: nginx/1.23.1
2022/08/14 04:52:51 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2022/08/14 04:52:51 [notice] 1#1: OS: Linux 4.15.0-191-generic
2022/08/14 04:52:51 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/08/14 04:52:51 [notice] 1#1: start worker processes
2022/08/14 04:52:51 [notice] 1#1: start worker process 32
2022/08/14 04:52:51 [notice] 1#1: start worker process 33
2022/08/14 04:52:51 [notice] 1#1: start worker process 34
2022/08/14 04:52:51 [notice] 1#1: start worker process 35
10.42.0.19 - - [14/Aug/2022:06:21:39 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.84.0-DEV" "-"
10.42.0.19 - - [14/Aug/2022:06:21:43 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.84.0-DEV" "-"
10.42.0.19 - - [14/Aug/2022:06:21:58 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.84.0-DEV" "-"

 

NodePort  서비스

# 기존에 사용중인 서비스가 ClusterIP TYPE
jinsu@jinsu:~$ kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.43.0.1      <none>        443/TCP   4h51m
mynginx      ClusterIP   10.43.42.124   <none>        80/TCP    179m
jinsu@jinsu:~$ 

# Service를 edit 수정하여 nodePort, type을 변경
jinsu@jinsu:~$ kubectl edit service mynginx
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"mynginx","namespace":"default"},"spec":{"ports":[
  creationTimestamp: "2022-08-14T03:24:02Z"
  name: mynginx
  namespace: default
  resourceVersion: "11731"
  selfLink: /api/v1/namespaces/default/services/mynginx
  uid: b11eaf09-9376-4e90-adb3-75d9a7754dd1
spec:
  clusterIP: 10.43.42.124
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30080
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: mynginx
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}
  
  
# TYPE이 NodePort로 변경  
jinsu@jinsu:~$ kubectl get service
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.43.0.1      <none>        443/TCP        5h27m
mynginx      NodePort    10.43.42.124   <none>        80:30080/TCP   3h35m
jinsu@jinsu:~$ 

# 본인 Kubernetes 서버 IP 확인
jinsu@jinsu:~$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.0.211  netmask 255.255.255.0  broadcast 192.168.0.255

# IP에 Port를 입력해서 nginx 동작 확인
jinsu@jinsu:~$ curl 192.168.0.211:30080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
jinsu@jinsu:~$

 

LoadBalancer 서비스

# type을 LoadBalancer로 변경 후 저장
jinsu@jinsu:~$ kubectl get service mynginx -oyaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"mynginx","namespace":"default"},"spec":{"ports":[{"port":80,"protocol":"TCP","targetPort":80}],"selector":{"run":"mynginx"}}}
  creationTimestamp: "2022-08-14T03:24:02Z"
  name: mynginx
  namespace: default
  resourceVersion: "12339"
  selfLink: /api/v1/namespaces/default/services/mynginx
  uid: b11eaf09-9376-4e90-adb3-75d9a7754dd1
spec:
  clusterIP: 10.43.42.124
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30080
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: mynginx
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 192.168.0.211
jinsu@jinsu:~$ 

# 서비스 상태 확인
jinsu@jinsu:~$ kubectl get svc
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
kubernetes   ClusterIP      10.43.0.1      <none>          443/TCP        5h32m
mynginx      LoadBalancer   10.43.42.124   192.168.0.211   80:30080/TCP   3h40m
jinsu@jinsu:~$

# EXTERNAL-IP로 확인해보면 nginx 서비스 동작 확인
jinsu@jinsu:~$ curl 192.168.0.211
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
jinsu@jinsu:~$

 

ExternalName 서비스

# external 서비스를 google 도메인으로 생성
jinsu@jinsu:~$ cat external.yaml 
apiVersion: v1
kind: Service
metadata:
  name: my-google-svc
spec:
  type: ExternalName
  externalName: google.com
jinsu@jinsu:~$
jinsu@jinsu:~$ kubectl apply -f external.yaml 
service/my-google-svc created
jinsu@jinsu:~$ 

# google도메인으로 externalName 만든 서비스 확인
jinsu@jinsu:~$ kubectl get svc
NAME            TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
kubernetes      ClusterIP      10.43.0.1      <none>          443/TCP        5h37m
mynginx         LoadBalancer   10.43.42.124   192.168.0.211   80:30080/TCP   3h45m
my-google-svc   ExternalName   <none>         google.com      <none>         8s
jinsu@jinsu:~$

# google로 생성한 pod랑 연동
jinsu@jinsu:~$ cat curl.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: curl
spec:
  containers:
  - name: curl
    image: curlimages/curl
    command: ["curl"]
    args: [ "my-google-svc" ]
jinsu@jinsu:~$ 
jinsu@jinsu:~$ kubectl apply -f curl.yaml 
pod/curl created
jinsu@jinsu:~$ 

# logs를 확인해보면 google도메인으로 연동 확인
jinsu@jinsu:~$ kubectl logs curl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1561  100  1561    0     0  19763      0 --:--:-- --:--:-- --:--:-- 20012
<!DOCTYPE html>
<html lang=en>
  <meta charset=utf-8>
  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
  <title>Error 404 (Not Found)!!1</title>
  <style>
    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
  </style>
  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
  <p><b>404.</b> <ins>That’s an error.</ins>
  <p>The requested URL <code>/</code> was not found on this server.  <ins>That’s all we know.</ins>
jinsu@jinsu:~$

 

 

 

 

 

 

 

 

 

참고자료

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

https://kubernetes.io/ko/docs/concepts/cluster-administration/networking/

 

반응형

+ Recent posts