본문 바로가기

카테고리 없음

eeeeeeeeeeeeeeeee

192.168.0.0/16

모든 파드를 생성했을때 ip

/24 네트워크 호스트네트워크 254개

/16 네트워크 부여  256*256-2 =65534개

쿠버네티스를 설계할 때 파드 갯수 고려

파드에 아이피가 부여가 되는데

사용자가 직접 부여가능 spec에서

충돌이 나면 안된다

파드 아이피 조사를 해야겠다 ->현실적으로 불가능

ip 자동셋팅 권장

예측할 수 없다

예측해서 셋팅할수 없다

----> 괴롭,,

동적환경에서 예측이 안됨

그래서 서비스라는 리소스를 만든다!

기본적으로 프록시의 기능이 있다

중간에서 릴레이 역할을 한다

 

 

리버스프록시

 a ------------->프록시(서버측에 프록시있음)------>b

클라이언트 프록시만 바라보고 통신 --->프록시가 릴레이 해준다(연결)---> 서버

로드밸런서

 

 

포워드프록시 

클라이언트와 프록시가 같은 네트워크

c---->프록시(클라이언트쪽에 프록시 있음)-->허용되는것만 --> 서버로 넘겨줌

보안장비 형태의 성격

 

 

서비스 리소스는 리버스 프록시!!

프록시 + 로드밸런서 역할 해줍ㄴ다

 

coredns 클러스터 내부 dns

서비스에 주소가 부여가 된다 (고유주소)

->고유이름을 가질수있다

 

서비스이름은 예측이 가능하다!!

 

 

 

 

서비스의 노출포트노출포

로드벨런서의 포트

 

타겟포트 파드의포트

 

80

파드셀렉터

셀렉터로 이루어진다

 

파드의 레이블 을 셀렉팅 하고있ㄷ가하고있ㄷ하고있ㄷ

클러스터아이피는 외붕[서 접속 불가능

 

엔드포인트

-> 실제 파드들

서비스를만들만 같은이름의 엔드포인트가 만들어짐

실제 서비스에서 레이블되는 파드의 목록을 가지고 있다

 

테스트할 파드를 만들어 테스트

 

파드는 디테치 방식

-d 백그라운드 실행

네트워크 관련된거 다 설치해노ㅎ은 이미지

 

 

세션 어피니티

인증받은 세션정보 없어서

세션고정

쿠키 못본다 4게층밖에 못봄

l4 로드밸런서

세션고정 하지 않음

같은 클라이언트 ip눈 같은곳으로만 연결

응답하는 파드가 같다

 

멀티포트

 

vagrant@k-control:~$ vi ldh-svc.yml
vagrant@k-control:~$ cat ldh-svc.yml
apiVercion: v1
kind: Service
metadata:
  name: ldh-svc
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: ldh-rs
vagrant@k-control:~$ cat ldh-rs.yml
apiVersion: apps/v1
kind: ReplicaSet 
metadata:
  name: ldh-rs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: dh-rc
  template:
    metadata:
      labels:
        app: dh-rc
    spec:
      containers:
      - image: ghcr.io/c1t1d0s7/go-myweb
        name: ldh
        ports:
        - containerPort: 8080
          protocol: TCP

vagrant@k-control:~$ vi ldh-rs.yml
vagrant@k-control:~$ vi ldh-rs.yml
vagrant@k-control:~$ cat ldh-rs.yml
apiVersion: apps/v1
kind: ReplicaSet 
metadata:
  name: ldh-rs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: ldh-rs
  template:
    metadata:
      labels:
        app: ldh-rs
    spec:
      containers:
      - image: ghcr.io/c1t1d0s7/go-myweb
        name: ldh
        ports:
        - containerPort: 8080
          protocol: TCP

vagrant@k-control:~$ kubectl create -f ldh-svc.yml
error: error validating "ldh-svc.yml": error validating data: apiVersion not set; if you choose to ignore these errors, turn validation off with --validate=false
vagrant@k-control:~$ vi ldh-svc.yml
vagrant@k-control:~$ vi ldh-svc.yml
vagrant@k-control:~$ kubectl create -f ldh-svc.yml
error: error validating "ldh-svc.yml": error validating data: apiVersion not set; if you choose to ignore these errors, turn validation off with --validate=false
vagrant@k-control:~$ vi ldh-svc.yml
vagrant@k-control:~$ kubectl create -f ldh-svc.yml
service/ldh-svc created
vagrant@k-control:~$ kubectl create -f ldh-rs.yml
replicaset.apps/ldh-rs created
vagrant@k-control:~$ kubectl get rs,po,svc
NAME                     DESIRED   CURRENT   READY   AGE
replicaset.apps/ldh-rs   3         3         3       2m50s

NAME               READY   STATUS    RESTARTS   AGE
pod/ldh-rs-2dkt8   1/1     Running   0          2m50s
pod/ldh-rs-52kqm   1/1     Running   0          2m50s
pod/ldh-rs-f4sqr   1/1     Running   0          2m50s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP   2d20h
service/ldh-svc      ClusterIP   10.101.73.229   <none>        80/TCP    3m5s
vagrant@k-control:~$ kubectl describe svc
Name:              kubernetes
Namespace:         default
Labels:            component=apiserver
                   provider=kubernetes
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP:                10.96.0.1
Port:              https  443/TCP
TargetPort:        6443/TCP
Endpoints:         192.168.200.50:6443
Session Affinity:  None
Events:            <none>


Name:              ldh-svc
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          app=ldh-rs
Type:              ClusterIP
IP:                10.101.73.229
Port:              <unset>  80/TCP
TargetPort:        8080/TCP
Endpoints:         192.168.108.18:8080,192.168.169.84:8080,192.168.82.144:8080
Session Affinity:  None
Events:            <none>
vagrant@k-control:~$ kubectl describe svc ldh-svc
Name:              ldh-svc
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          app=ldh-rs
Type:              ClusterIP
IP:                10.101.73.229
Port:              <unset>  80/TCP
TargetPort:        8080/TCP
Endpoints:         192.168.108.18:8080,192.168.169.84:8080,192.168.82.144:8080
Session Affinity:  None
Events:            <none>
vagrant@k-control:~$ kubectl get po -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP               NODE      NOMINATED NODE   READINESS GATES
ldh-rs-2dkt8   1/1     Running   0          6m    192.168.82.144   k-node1   <none>           <none>
ldh-rs-52kqm   1/1     Running   0          6m    192.168.108.18   k-node2   <none>           <none>
ldh-rs-f4sqr   1/1     Running   0          6m    192.168.169.84   k-node3   <none>           <none>
vagrant@k-control:~$ kubectl scale rs ldh-rs --replicas=5
replicaset.apps/ldh-rs scaled
vagrant@k-control:~$ kubectl get po -o wide
NAME           READY   STATUS    RESTARTS   AGE     IP               NODE      NOMINATED NODE   READINESS GATES
ldh-rs-2dkt8   1/1     Running   0          6m44s   192.168.82.144   k-node1   <none>           <none>
ldh-rs-52kqm   1/1     Running   0          6m44s   192.168.108.18   k-node2   <none>           <none>
ldh-rs-9m5k4   1/1     Running   0          7s      192.168.82.145   k-node1   <none>           <none>
ldh-rs-f4sqr   1/1     Running   0          6m44s   192.168.169.84   k-node3   <none>           <none>
ldh-rs-vjp5n   1/1     Running   0          7s      192.168.169.85   k-node3   <none>           <none>
vagrant@k-control:~$ kubectl describe svc ldh-svc
Name:              ldh-svc
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          app=ldh-rs
Type:              ClusterIP
IP:                10.101.73.229
Port:              <unset>  80/TCP
TargetPort:        8080/TCP
Endpoints:         192.168.108.18:8080,192.168.169.84:8080,192.168.169.85:8080 + 2 more...
Session Affinity:  None
Events:            <none>
vagrant@k-control:~$ kubectl describe ep ldh-svc
Name:         ldh-svc
Namespace:    default
Labels:       <none>
Annotations:  endpoints.kubernetes.io/last-change-trigger-time: 2021-07-09T04:17:14Z
Subsets:
  Addresses:          192.168.108.18,192.168.169.84,192.168.169.85,192.168.82.144,192.168.82.145
  NotReadyAddresses:  <none>
  Ports:
    Name     Port  Protocol
    ----     ----  --------
    <unset>  8080  TCP

Events:
  Type     Reason                  Age    From                 Message
  ----     ------                  ----   ----                 -------
  Warning  FailedToUpdateEndpoint  7m23s  endpoint-controller  Failed to update endpoint default/ldh-svc: Operation cannot be fulfilled on endpoints "ldh-svc": the object has been modified; please apply your changes to the latest version and try again
vagrant@k-control:~$ kubectl run nettool -it --image=ghcr.io/c1t1d0s7/network-multitool --rm bash
If you don't see a command prompt, try pressing enter.
Error attaching, falling back to logs: unable to upgrade connection: pod does not exist
pod "nettool" deleted
Error from server (NotFound): the server could not find the requested resource ( pods/log nettool)
vagrant@k-control:~$ kubectl run nettool -it --image=ghcr.io/c1t1d0s7/network-multitool --rm bash
If you don't see a command prompt, try pressing enter.
Error attaching, falling back to logs: unable to upgrade connection: pod does not exist
pod "nettool" deleted
Error from server (NotFound): the server could not find the requested resource ( pods/log nettool)
vagrant@k-control:~$ kubectl run nettool -it --image=ghcr.io/c1t1d0s7/network-multitool --rm bash
If you don't see a command prompt, try pressing enter.
Error attaching, falling back to logs: unable to upgrade connection: pod does not exist
pod "nettool" deleted
Error from server (NotFound): the server could not find the requested resource ( pods/log nettool)
vagrant@k-control:~$ kubectl run nettool -it --image=ghcr.io/c1t1d0s7/network-multitool --rm bash^C
vagrant@k-control:~$ kubectl run nettool -it --image=ghcr.io/c1t1d0s7/network-multitool --rm bash 
If you don't see a command prompt, try pressing enter.
Error attaching, falling back to logs: unable to upgrade connection: pod does not exist
pod "nettool" deleted
Error from server (NotFound): the server could not find the requested resource ( pods/log nettool)
vagrant@k-control:~$ vi ldh-svc.yml
vagrant@k-control:~$ kubectl get services ldh-svc
NAME      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
ldh-svc   ClusterIP   10.101.73.229   <none>        80/TCP    15m
vagrant@k-control:~$ vi ldh-rs.yml
vagrant@k-control:~$ kubectl create -f ldh-rs.yml
Error from server (AlreadyExists): error when creating "ldh-rs.yml": replicasets.apps "ldh-rs" already exists
vagrant@k-control:~$ kubectl get services ldh-svc
NAME      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
ldh-svc   ClusterIP   10.101.73.229   <none>        80/TCP    18m
vagrant@k-control:~$ kubectl run nettool -it --image=ghcr.io/c1t1d0s7/network-multitool --rm bash
If you don't see a command prompt, try pressing enter.
Error attaching, falling back to logs: unable to upgrade connection: pod does not exist
pod "nettool" deleted
Error from server (NotFound): the server could not find the requested resource ( pods/log nettool)
vagrant@k-control:~$ kubectl run ldh -it --image=ghcr.io/c1t1d0s7/network-multitool --rm bash
If you don't see a command prompt, try pressing enter.
bash-5.1# curl http://192.168.108.18
curl: (7) Failed to connect to 192.168.108.18 port 80: Connection refused
bash-5.1# curl http://10.101.73.229
Hello World!
ldh-rs-9m5k4
bash-5.1# curl http://10.101.73.229
Hello World!
ldh-rs-52kqm
bash-5.1# 
bash-5.1# curl http://10.101.73.229
Hello World!
ldh-rs-f4sqr
bash-5.1# curl http://10.101.73.229
Hello World!
ldh-rs-vjp5n
bash-5.1# curl http://10.101.73.229
Hello World!
ldh-rs-vjp5n
bash-5.1# curl http://10.101.73.229

 

 

 

서비스탐색

이름을 가지고 통신

서비스를 읽어 자동으로 환경변수 등록

파드가 만들어진후에 환경변수로 등록?

ㄴㄴ 방법없음

나중에 서비스가 바뀌면 등록 안됨

--> 그래서~~! dns를 이용한 탐색을 한다

 

 

 

어떤네임스페이스에 있는지 지정지

서비스랑 파드가 다른곳에 있으면

네임스페이스를 지정 해줘야한다

파드를 다른 네임스페이스에 띄워서

서비스 이름가지고 통신 됨? ㄴㄴ

다르며ㅑㄴ 안됨

 

 

 

 

vagrant@k-control:~$ cat ldh-svc-ses-aff.yml
apiVersion: v1
kind: Service
metadata:
  name: ldh-svc-ses-aff
spec:
  sessionAffinity: ClientIP
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: ldh-rs
~                
vagrant@k-control:~$ kubectl create -f ldh-svc-ses-aff.yaml
error: the path "ldh-svc-ses-aff.yaml" does not exist
vagrant@k-control:~$ kubectl create -f ldh-svc-ses-aff.yml
error: error parsing ldh-svc-ses-aff.yml: error converting YAML to JSON: yaml: line 13: could not find expected ':'
vagrant@k-control:~$ vi ldh-svc-ses-aff.yml
vagrant@k-control:~$ vi ldh-svc-ses-aff.yml
vagrant@k-control:~$ kubectl create -f ldh-svc-ses-aff.yml
error: error parsing ldh-svc-ses-aff.yml: error converting YAML to JSON: yaml: line 13: could not find expected ':'
vagrant@k-control:~$ vi ldh-svc-ses-aff.yml
vagrant@k-control:~$ kubectl create -f ldh-svc-ses-aff.yml
error: error parsing ldh-svc-ses-aff.yml: error converting YAML to JSON: yaml: line 13: could not find expected ':'
vagrant@k-control:~$ kubectl run ldh -it --image=ghcr.io/c1t1d0s7/network-multitool --rm bash
If you don't see a command prompt, try pressing enter.
Error attaching, falling back to logs: unable to upgrade connection: pod does not exist
pod "ldh" deleted
Error from server (NotFound): the server could not find the requested resource ( pods/log ldh)
vagrant@k-control:~$ kubectl run dh -it --image=ghcr.io/c1t1d0s7/network-multitool --rm bashIf you don't see a command prompt, try pressing enter.
bash-5.1# env
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_PORT=443
LDH_SVC_PORT_80_TCP_ADDR=10.101.73.229
HOSTNAME=dh
PWD=/
LDH_SVC_PORT_80_TCP=tcp://10.101.73.229:80
LDH_SVC_PORT_80_TCP_PORT=80
HOME=/root
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
LDH_SVC_PORT=tcp://10.101.73.229:80
TERM=xterm
SHLVL=1
LDH_SVC_PORT_80_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PORT=443
LDH_SVC_SERVICE_PORT=80
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
LDH_SVC_SERVICE_HOST=10.101.73.229
_=/usr/bin/env
bash-5.1# kubectl get all -n kube-system -l k8s-app=kube-dns
bash: kubectl: command not found
bash-5.1# ^Cbectl get all -n kube-system -l k8s-app=kube-dns
bash-5.1# ^C
bash-5.1# exit
exit
Session ended, resume using 'kubectl attach dh -c dh -i -t' command when the pod is running
pod "dh" deleted
vagrant@k-control:~$ kubectl get all -n kube-system -l k8s-app=kube-dns
NAME                          READY   STATUS    RESTARTS   AGE
pod/coredns-f9fd979d6-hlpf4   1/1     Running   2          2d2h
pod/coredns-f9fd979d6-scz22   1/1     Running   2          2d2h

NAME               TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
service/kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   2d21h

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/coredns   2/2     2            2           2d21h

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/coredns-66bff467f8   0         0         0       2d21h
replicaset.apps/coredns-f9fd979d6    2         2         2       2d2h
vagrant@k-control:~$ kubectl run nettool -it --image=ghcr.io/c1t1d0s7/network-multitoos --rm bash
pod "nettool" deleted
error: timed out waiting for the condition
vagrant@k-control:~$ kubectl run dhdh -it --image=ghcr.io/c1t1d0s7/network-multitoos --rm bash
pod "dhdh" deleted
error: timed out waiting for the condition
vagrant@k-control:~$ kubectl run h -it --image=ghcr.io/c1t1d0s7/network-multitoos --rm bash
^[[A^[[A^[[A^Cvagrant@k-control:~$ kubectl run h -it --image=ghcr.io/c1t1d0s7/network-multitvagrant@k-control:~$ kubectl run hd -it --image=ghcr.io/c1t1d0s7/network-multitools --rm bash
pod "hd" deleted
error: timed out waiting for the condition
vagrant@k-control:~$ kubectl run ldh -it --image=ghcr.io/c1t1d0s7/network-multitool --rm bash
If you don't see a command prompt, try pressing enter.
bash-5.1# cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
bash-5.1# curl http:// ldh-svc
curl: (3) URL using bad/illegal format or missing URL
Hello World!
ldh-rs-vjp5n
bash-5.1# curl http:// ldh-svc.default
curl: (3) URL using bad/illegal format or missing URL
Hello World!
ldh-rs-52kqm
bash-5.1# curl http:// ldh-svc.default.svc
curl: (3) URL using bad/illegal format or missing URL
Hello World!
ldh-rs-f4sqr
bash-5.1# curl http:// ldh-svc.default.svc.cluster
curl: (3) URL using bad/illegal format or missing URL
curl: (6) Could not resolve host: ldh-svc.default.svc.cluster
bash-5.1# curl http:// ldh-svc.default.svc.cluster.local
curl: (3) URL using bad/illegal format or missing URL
Hello World!
ldh-rs-52kqm
bash-5.1# exit
exit
Session ended, resume using 'kubectl attach ldh -c ldh -i -t' command when the pod is running
pod "ldh" deleted
vagrant@k-control:~$ kubectl run hd -it --image=ghcr.io/c1t1d0s7/network-multitools --rm bash^C
vagrant@k-control:~$ kubectl get demonsets.apps -l k8s-app=kube-dns -n kube-system
error: the server doesn't have a resource type "demonsets"
vagrant@k-control:~$ kubectl get daemonsets.apps -l k8s-app=kube-dns -n kube-system
No resources found in kube-system namespace.
vagrant@k-control:~$ kubectl get daemonsets.apps -l k8s-app=kube-dns -n kube-system
No resources found in kube-system namespace.
vagrant@k-control:~$

 

 

더보기
vagrant@k-control:~$ kubectl delete replicasets.apps,service --all
replicaset.apps "ldh-rs" deleted
service "kubernetes" deleted
service "ldh-svc" deleted
vagrant@k-control:~$

 

https://metallb.universe.tf/

 

MetalLB, bare metal load-balancer for Kubernetes

MetalLB is a load-balancer implementation for bare metal Kubernetes clusters, using standard routing protocols. MetalLB is a young project. You should treat it as a beta system. The project maturity page explains what that implies. Why? Kubernetes does not

metallb.universe.tf

 

https://metallb.universe.tf/installation/

 

MetalLB, bare metal load-balancer for Kubernetes

Installation Before starting with installation, make sure you meet all the requirements. In particular, you should pay attention to network addon compatibility. If you’re trying to run MetalLB on a cloud platform, you should also look at the cloud compat

metallb.universe.tf

 

https://metallb.universe.tf/configuration/ 

 

MetalLB, bare metal load-balancer for Kubernetes

Configuration MetalLB remains idle until configured. This is accomplished by creating and deploying a configmap into the same namespace (metallb-system) as the deployment. There is an example configmap in manifests/example-config.yaml, annotated with expla

metallb.universe.tf