본문 바로가기

DevOps/쿠버네티스

쿠버네티스 service를 사용한 네트워크 설정

POD 배포하기

test-pod.yml

apiVersion: v1
kind: ReplicationController
metadata:
  name: kubia
spec:
  replicas: 3
  selector:
    app: kubia
  template:
    metadata:
      labels:
        app: kubia
    spec:
      containers:
      - name: kubia
        image: reg.cloud.com/kubia
        ports:
        - containerPort: 8080

$ k create -f test-pod.yml

## test pod 실행 총 3개 실행 8080으로 열기

Service 배포하기

test-service.yml

apiVersion: v1
kind: Service
metadata:
  name: kubia
spec:
  ports:
  - port: 80 ##clusterIP port
    targetPort: 8080 ## pod port
  selector:
    app: kubia ## 대상 pod

$ k create -f test-service.yml

## service 실행



## service로 만든 LB인 10.96.187.178로 호출해도 정상적으로 호출됨(internal dns통해서 실제 ip찾아서 연결시킴)


외부와 연결하기


$ k edit svc kubia

## service의 type을 NodePort로 변경하기

## ClusterIP를 지우고 NodePort로 입력, 저장

(대소문자 띄어쓰기 주의!!)


$ k get svc

$ k get po -o wide

ip a 

## ens192에 매칭되는 ip를 찾고, service의 port를 찾는다.




ens192의 ipservice와 매칭되는 port 즉, http://10.10.12.141:31143 를 접속하면 아래와 같이 외부에서도 접속된다.



session affinity 구성

## 외부로 부터 처음 호출받을때는 random, 그러나 지속적으로 해당 ip로 부터 call올때는 한개의 서버와만 통신하도록 할때 아래와 같이 설


$ k edit service kubia



## sessionAffinity : None -> ClinetIP

(대소문자 띄어쓰기 주의!!)


동일 서비스에 여러 포트 사용

## 명시적으로 할 경우
apiVersion: v1
kind: Service
metadata:
  name: kubia
spec:
  ports:
  - port: 80 ## 내부 cilentIP는 8080으로 매칭
    targetPort: 8080
  - port: 443 ## 내부 clientIP는 1443으로 매칭
    targetPort: 1443
  selector:
    app: kubia ## 대상 pod

## 비 명시적으로 할 경우
apiVersion: v1
kind: Service
metadata:
  name: kubia
spec:
  ports:
  - port: 80 ## 내부 cilentIP는 자동으로 80으로 매칭
  - port: 443 ## 내부 clientIP는 자동으로 443으로 매칭
  selector:
    app: kubia ## 대상 pod


DNS찾기

$ k get po -o wide
$ k exec -it <host> sh
cat /etc/resolv.conf


## dns는 10.96.0.10을 사용

## 10.96.0.10은 어디있을까?


$ k get po -n kube-system -o wide

## 여기아님 ip가 다른걸 볼 수 있음



$ k get svc -n kube-system

## 찾았따




Headless service 

apiVersion: v1
kind: Service
metadata:
  name: kubia-hl
spec:
  clusterIP: None
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: kubia

## 라운드로빈말고 다른방식으로 쓰고 싶을때 사용


서비스가 셀렉터를 안주면 어떻게 될까

apiVersion: v1
kind: Service
metadata:
  name: kubia-hl
spec:
  clusterIP: None
  ports:
  - port: 80
    targetPort: 8080

## 매핑되는 값을 삭제되면?



## label 매핑이 안된 놈들끼리 매핑되게 됨