vi myweb-rs
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myweb-rs
spec:
replicas: 3
selector:
matchLabels:
app: web
env: dev
template:
metadata:
labels:
app: web
env: dev
spec:
containers:
- name: myweb
image: ghcr.io/c1t1d0s7/go-myweb
ports:
- containerPort: 8080
protocol: TCP
vi myweb-np.yaml
apiVersion: v1
kind: Service
metadata:
name: myweb-svc-np
spec:
type: NodePort
selector:
app: web
ports:
- port: 80
targetPort: 8080
kubectl create -f . #서비스 시작
kubectl get svc #서비스 포트 확인
curl 192.168.100.100:32380 #포트 접근
kubectl delete -f .
외부에서 접근할 때 보통 주소만 검색하지 포트번호를 32380번 이렇게 하지 않는다. 그래서 앞단에 LoadBalacer를 두어 이를 해결할 수 있다.
vi myweb-rs
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myweb-rs
spec:
replicas: 3
selector:
matchLabels:
app: web
env: dev
template:
metadata:
labels:
app: web
env: dev
spec:
containers:
- name: myweb
image: ghcr.io/c1t1d0s7/go-myweb
ports:
- containerPort: 8080
protocol: TCP
vi myweb-ls.yaml
apiVersion: v1
kind: Service
metadata:
name: myweb-svc-lb
spec:
type: LoadBalancer
selector:
app: web
ports:
- port: 80
targetPort: 8080
nodePort: 31313
vi ~/kubespray/inventory/mycluster/group_vars/k8s_cluster/addons.yml
...
139 metallb_enabled: true
140 metallb_speaker_enabled: true
141 metallb_ip_range:
142 - "192.168.100.240-192.168.100.249"
...
168 metallb_protocol: "layer2"
...
이렇게 addons파일의 두 부분을 수정해주고
vi ~/kubespray/inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
이부분도 수정해주고 플레이북을 다시 돌려보면 kubespray의 loadbalancer애드온이 설치가 됨
ansible-playbook -i inventory/mycluster/inventory.ini cluster.yml -b
kubectl create -f .
kubectl get svc
curl 192.168.100.240
크롬에도 접속해보면
kubectl delete -f .
### 서비스 삭제