Services
포드의 문제점
- 포드는 일시적으로 생성한 컨테이너의 집합
- 때문에 포드가 지속적으로 생겨났을 때 서비스를 하기에 적합하지 않음
- IP 주소의 지속적인 변동, 로드밸런싱을 관리해줄 또 다른 개체가 필요
- 이 문제를 해결하기위해 서비스라는 리소스가 존재
서비스의 요구사항
- 외부 클라이언트가 몇 개이든지 프론트엔드 포드로 연결
- 프론트엔드는 다시 백엔드 데이터베이스로 연결
- 포드의 IP가 변경될 때마다 재설정 하지 않도록 해야함
서비스의 생성방법
- kubectl의 expose가 가장 쉬운 방법
- YAML을 통해 버전 관리 가능
apiVersion: v1
kind: Service
metadata:
name: http-go-svc
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: http-go
$ kubectl create -f http-go-svc.yaml
service/http-go-srv created
$ kubectl create -f http-go-rs.yaml
replicaset.apps/http-go-rs created
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
http-go-svc ClusterIP 10.102.70.41 <none> 80/TCP 28s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 8h
서비스의 기능 확인
- 서비스를 생성하면 EXTERNAL-IP를 아직 받지 못한 것을 확인
kubectl exec <포드 이름> -- curl
명령어로 확인해보자.
$ kubectl exec http-go-rs-4l52m -- curl 10.12.0.237:80 -s
Welcome! http-go-rs-vsf5n
포드 간의 통신을 위한 ClusterIP
- 다수의 포드를 하나의 서비스로 묶어서 관리
ClusterIP 정의 예
서비스의 세션 고정하기
- 서비스가 다수의 포드로 구성하면 웹서비스의 세션이 유지되지 않음
- 이를 위해 처음 들어왔던 클라이언트 IP를 그대로 유지해주는 방법이 필요
- sessionAffinity: ClientIP라는 옵션을 주면 해결 완료!
다중 포트 서비스 방법
- 포트에 그대로 나열해서 사용
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
http-go-svc ClusterIP 10.102.70.41 <none> 80/TCP,443/TCP 4m28s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9h
서비스하는 IP 정보 확인
- 서비스 세부 사항에는 연결될 IP에 대한 정보가 존재
$ kubectl describe svc http-go-svc
Name: http-go-svc
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=http-go
Type: ClusterIP
IP Families: <none>
IP: 10.102.70.41
IPs: 10.102.70.41
Port: http 80/TCP
TargetPort: 8080/TCP
Endpoints: 10.8.1.2:8080,10.8.1.3:8080,10.8.1.4:8080
Port: https 443/TCP
TargetPort: 8443/TCP
Endpoints: 10.8.1.2:8443,10.8.1.3:8443,10.8.1.4:8443
Session Affinity: ClientIP
Events: <none>
외부 IP 연결 설정 YAML
- Service와 Endpoints 리소스 모두 생성 필요
external-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: external-service
spec:
ports:
- port: 80
external-endpoint.yaml
apiVersion: v1
kind: Endpoints
metadata:
name: external-service
subsets:
- addresses:
- ip: 11.11.11.11
- ip: 22.22.22.22
ports:
- port: 80
외부 IP 연결 설정 YAML
- Service와 Endpoints 연결 구조
실습
- GKE로 실습하기 위해 GCP 접속
- http-go-deploy.yaml 파일 생성
$ kubectl create deploy --image=gasbugs/http-go http-go --dry-run=client -o yaml > http-go-deploy.yaml
- http-go-deploy.yaml 에 service 설정 추가
https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service
apiVersion: v1
kind: Service
metadata:
name: http-go-svc
spec:
selector:
app: http-go
ports:
- protocol: TCP
port: 80
targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: http-go
name: http-go
spec:
replicas: 1
selector:
matchLabels:
app: http-go
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: http-go
spec:
containers:
- image: gasbugs/http-go
name: http-go
ports:
- containerPort: 8080
resources: {}
status: {}
- yaml 설정 내용 생성
$ kubectl create -f http-go-deploy.yaml
service/http-go-svc created
deployment.apps/http-go created
- 생성확인
$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/http-go-6d46d6c74d-gwdd9 1/1 Running 0 2m6s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/http-go-svc ClusterIP 10.36.3.126 <none> 80/TCP 2m7s
service/kubernetes ClusterIP 10.36.0.1 <none> 443/TCP 2m45s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/http-go 1/1 1 1 2m7s
NAME DESIRED CURRENT READY AGE
replicaset.apps/http-go-6d46d6c74d 1 1 1 2m7s
- IP 할당 확인
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
http-go-6d46d6c74d-gwdd9 1/1 Running 0 18s 10.32.1.8 gke-cluster-1-default-pool-718c64c6-bj5l <none> <none>
Endpoints 에 10.32.1.8:8080 할당 확인
$ kubectl describe svc
Name: http-go-svc
Namespace: default
Labels: <none>
Annotations: <none>
Selector: run=http-go
Type: ClusterIP
IP: 10.36.3.126
Port: <unset> 80/TCP
TargetPort: 8080/TCP
Endpoints: 10.32.1.8:8080
Session Affinity: None
Events: <none>
Name: kubernetes
Namespace: default
Labels: component=apiserver
provider=kubernetes
Annotations: <none>
Selector: <none>
Type: ClusterIP
IP: 10.36.0.1
Port: https 443/TCP
TargetPort: 443/TCP
Endpoints: 34.64.230.226:443
Session Affinity: None
Events: <none>
- replicas 5 설정
$ kubectl scale deploy http-go --replicas=5
deployment.apps/http-go scaled
replica 생성 확인
$ kubectl get pod -w
NAME READY STATUS RESTARTS AGE
http-go-6d46d6c74d-gwdd9 1/1 Running 0 4m7s
http-go-6d46d6c74d-kx872 1/1 Running 0 49s
http-go-6d46d6c74d-sm8tq 1/1 Running 0 49s
http-go-6d46d6c74d-tb7vc 1/1 Running 0 49s
http-go-6d46d6c74d-wn465 1/1 Running 0 49s
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
http-go-6d46d6c74d-gwdd9 1/1 Running 0 5m21s 10.32.1.8 gke-cluster-1-default-pool-718c64c6-bj5l <none> <none>
http-go-6d46d6c74d-kx872 1/1 Running 0 2m3s 10.32.1.10 gke-cluster-1-default-pool-718c64c6-bj5l <none> <none>
http-go-6d46d6c74d-sm8tq 1/1 Running 0 2m3s 10.32.0.5 gke-cluster-1-default-pool-718c64c6-vtxb <none> <none>
http-go-6d46d6c74d-tb7vc 1/1 Running 0 2m3s 10.32.1.9 gke-cluster-1-default-pool-718c64c6-bj5l <none> <none>
http-go-6d46d6c74d-wn465 1/1 Running 0 2m3s 10.32.2.8 gke-cluster-1-default-pool-718c64c6-7qq2 <none> <none>
- Endpoints 추가 등록된 사항 확인
$ kubectl describe svc
Name: http-go-svc
Namespace: default
Labels: <none>
Annotations: <none>
Selector: run=http-go
Type: ClusterIP
IP: 10.36.3.126
Port: <unset> 80/TCP
TargetPort: 8080/TCP
Endpoints: 10.32.0.5:8080,10.32.1.10:8080,10.32.1.8:8080 + 2 more...
Session Affinity: None
Events: <none>
...
- http-go-svc 설정 수정
$ kubectl edit svc http-go-svc
한번 접속한 IP로 계속 접속하게 만드는 설정
타입을 지정하지 않으면 자동으로 ClusterIP로 지정됨
...
spec:
sessionAffinity: ClientIP
...
- 직접 접속 확인
ClientIP를 추가했기 때문에 접속시도시 로드밸런싱 되지 않고 계속 같은 IP로 유지되는 것을 확인할 수 있음
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
http-go-svc ClusterIP 10.36.3.126 <none> 80/TCP 11m
kubernetes ClusterIP 10.36.0.1 <none> 443/TCP 11m
$ kubectl run -it --rm --image=busybox bash
If you don't see a command prompt, try pressing enter.
/ # wget -O- -q 10.36.3.126
Welcome! http-go-6d46d6c74d-sm8tq
/ # wget -O- -q 10.36.3.126
Welcome! http-go-6d46d6c74d-sm8tq
/ # wget -O- -q 10.36.3.126
Welcome! http-go-6d46d6c74d-sm8tq
/ # wget -O- -q 10.36.3.126
Welcome! http-go-6d46d6c74d-sm8tq
- ClientIP의 timeoutSeconds 를 수정하고 싶을때
service.spec.sessionAffinityConfig.clientIP.timeoutSeconds
는 기본 10800초(3시간)로 설정되어있는데
수정하고 싶은 설정값으로 설정하면 됨
서비스 노출하는 세 가지 방법
- NodePort: 노드의 자체 포트를 사용하여 포드로 리다이렉션
- LoadBalancer: 외부 게이트웨이를 사용해 노드 포트로 리다이렉션
- Ingress: 하나의 IP 주소를 통해 여러 서비스를 제공하는 특별한 메커니즘
노드포트 생성하기
- 서비스 yaml 파일을 작성
- type에 NodePort를 지정
- 30000-32767포트만 사용가능
http-go-np.yaml
apiVersion: v1
kind: Service
metadata:
name: http-go-svc
spec:
type: NodePort
ports:
- port: 80 # 서비스의 포트
targetPort: 8080 # 포드의 포트
nodePort: 30001 # 최종적으로 서비스되는 포트
selector:
app: http-go
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
http-go-np NodePort 10.36.2.195 <none> 80:30001/TCP 47s
http-go-svc ClusterIP 10.36.3.126 <none> 80/TCP 106m
kubernetes ClusterIP 10.36.0.1 <none> 443/TCP 107m
- GCP에서 방화벽 해제 후 노드로 직접 접속
$ gcloud compute firewall-rules create http-go-svc-rule --allow=tcp:30001
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/freework-gke-test-20201227/global/firewalls/http-go-svc-rule].
Creating firewall...done.
NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED
http-go-svc-rule default INGRESS 1000 tcp:30001 False
$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION
CONTAINER-RUNTIME
gke-cluster-1-default-pool-718c64c6-7qq2 Ready <none> 179m v1.16.15-gke.4901 10.178.0.4 34.64.177.86 Container-Optimized OS from Google 4.19.112+
docker://19.3.1
gke-cluster-1-default-pool-718c64c6-bj5l Ready <none> 179m v1.16.15-gke.4901 10.178.0.3 34.64.68.80 Container-Optimized OS from Google 4.19.112+
docker://19.3.1
gke-cluster-1-default-pool-718c64c6-vtxb Ready <none> 179m v1.16.15-gke.4901 10.178.0.2 34.64.142.148 Container-Optimized OS from Google 4.19.112+
docker://19.3.1
$ curl 34.64.177.86:30001
Welcome! http-go-6d46d6c74d-tb7vc
노드포트 서비스의 패킷 흐름
그림 출처: https://kubernetes.io/docs/concepts/services-networking/service/
노드포트 실습
- http-go-np.yaml 파일 생성 후 수정
$ cp http-go-deploy.yaml http-go-np.yaml
아래와 같이 수정
apiVersion: v1
kind: Service
metadata:
name: http-go-np
spec:
type: NodePort
selector:
app: http-go
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30001
create 하여 http-go-np service 생성
$ kubectl create -f http-go-np.yaml
service/http-go-np created
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
http-go-np NodePort 10.36.2.195 <none> 80:30001/TCP 47s
http-go-svc ClusterIP 10.36.3.126 <none> 80/TCP 106m
kubernetes ClusterIP 10.36.0.1 <none> 443/TCP 107m
- 외부 IP 확인
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION
CONTAINER-RUNTIME
gke-cluster-1-default-pool-718c64c6-7qq2 Ready <none> 177m v1.16.15-gke.4901 10.178.0.4 34.64.177.86 Container-Optimized OS from Google 4.19.112+
docker://19.3.1
gke-cluster-1-default-pool-718c64c6-bj5l Ready <none> 177m v1.16.15-gke.4901 10.178.0.3 34.64.68.80 Container-Optimized OS from Google 4.19.112+
docker://19.3.1
gke-cluster-1-default-pool-718c64c6-vtxb Ready <none> 177m v1.16.15-gke.4901 10.178.0.2 34.64.142.148 Container-Optimized OS from Google 4.19.112+
docker://19.3.1
- gcloud 방화벽 허용 하기
$ gcloud compute firewall-rules create http-go-svc-rule --allow=tcp:30001
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/freework-gke-test-20201227/global/firewalls/http-go-svc-rule].
Creating firewall...done.
NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED
http-go-svc-rule default INGRESS 1000 tcp:30001 False
접속 확인
$ curl 34.64.177.86:30001
Welcome! http-go-6d46d6c74d-tb7vc
$ curl 34.64.68.80:30001
Welcome! http-go-6d46d6c74d-gwdd9
$ curl 34.64.142.148:30001
Welcome! http-go-6d46d6c74d-tb7vc
노드포트를 활용한 로드밸런싱
그림 출처: https://en.wikipedia.org/wiki/Kubernetes
로드밸런스 생성하기
- NodePort 서비스의 확장된 서비스
- 클라우드 서비스에서 사용 가능
- yaml 파일에서 타입을 NodePort 대신 LoadBalancer를 설정
- 로드 밸런서의 IP 주소를 통해 서비스에 액세스
- 로드밸런스가 잘 생성됐는지 확인
- 30533포트는 지정해주지 않으면 임의로 생성됨
$ kubectl get svc
$ curl 34.68.131.99
로드밸런스 서비스의 패킷 흐름
- 클러스터에 로드밸런싱을 해주는 개체 필요
- 로드밸런스는 노드포트의 기능을 포함
그림 출처: https://kubernetes.io/docs/concepts/services-networking/service/
실습
- http-go-lb.yaml 파일 생성 후 수정
$ cp http-go-np.yaml http-go-lb.yaml
아래와 같이 수정
apiVersion: v1
kind: Service
metadata:
name: http-go-lb
spec:
type: LoadBalancer
selector:
app: http-go
ports:
- protocol: TCP
port: 80
targetPort: 8080
create 하여 http-go-lb service 생성
$ kubectl create -f http-go-lb.yaml
service/http-go-lb created
- 로드밸런스 생성확인
생성하기까지 시간이 조금 걸림 클라우드와 연계된 서비스 이므로 클라우드 환경에서만 생성가능
VitualBox 환경에서는 생성 불가
포트를 정해주지 않았는데 노드 포트가 자동으로 31114로 만들어져서 제공이 된다
$ kubectl get svc -w
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
http-go-lb LoadBalancer 10.36.3.68 34.64.239.127 80:31114/TCP 39s
http-go-np NodePort 10.36.2.195 <none> 80:30001/TCP 24m
http-go-svc ClusterIP 10.36.3.126 <none> 80/TCP 130m
kubernetes ClusterIP 10.36.0.1 <none> 443/TCP 131m
- 접속 확인
$ curl 34.64.239.127
Welcome! http-go-6d46d6c74d-gwdd9
- Kuebernetes Engine 웹에서 로드밸런서 생성 확인
서비스 및 수신 - http-go-lb - 부하 분산기 생성 확인
GCP의 부하 분산 기능을 사용해 부하 분산기를 생성
연습문제
- tomcat을 노드포트로 서비스하기(30002번 포트 사용)
- tomcat을 로드밸런스로 서비스하기(80번 포트 사용)
- 기존 생성 서비스 및 pod 모두 삭제
$ kubectl delete all --all
- tomcat-deploy-np-lb.yaml 파일 생성
$ kubectl create deploy tomcat --image=tomcat --dry-run=client -o yaml > tomcat-deploy-np-lb.yaml
yaml 파일 수정
https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service
에서 설정내용 복사 후 수정
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: tomcat
name: tomcat
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: tomcat
spec:
containers:
- image: tomcat
name: tomcat
resources: {}
status: {}
---
apiVersion: v1
kind: Service
metadata:
name: tomcat-svc
spec:
type: NodePort
selector:
app: tomcat
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30002
---
apiVersion: v1
kind: Service
metadata:
name: tomcat-lb
spec:
type: LoadBalancer
selector:
app: tomcat
ports:
- protocol: TCP
port: 80
targetPort: 8080
- create
$ kubectl create -f tomcat-deploy-np-lb.yaml
deployment.apps/tomcat created
service/tomcat-svc created
service/tomcat-lb created
- tomcat 구동 확인
$ kubectl get pod -w
NAME READY STATUS RESTARTS AGE
tomcat-7989d99887-nrhgl 1/1 Running 0 3m22s
- 로드 밸런서 및 노드 포트 생성확인
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.36.0.1 <none> 443/TCP 3m57s
tomcat-lb LoadBalancer 10.36.10.205 34.64.239.127 80:32515/TCP 3m54s
tomcat-svc NodePort 10.36.7.103 <none> 80:30002/TCP 3m54s
- 로드 밸런서 접속 확인
$ curl 34.64.239.127
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-
size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1><hr c
lass="line" /><p><b>Type</b> Status Report</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="
line" /><h3>Apache Tomcat/9.0.41</h3></body></html>
- gcloud 방화벅 룰 추가
$ gcloud compute firewall-rules create tomcat-svc-rule --allow=tcp:30002
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/freework-gke-test-20201227/global/firewalls/tomcat-svc-rule].
Creating firewall...done.
NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED
tomcat-svc-rule default INGRESS 1000 tcp:30002 False
- 노드포트 접속 확인
$ curl 34.64.177.86:30002
tomcat 버전 변경
$ kubectl edit deploy tomcat
deployment.apps/tomcat edited
아래와 같이 image명 수정
spec:
...
template:
...
spec:
containers:
- image: consol/tomcat-7.0
업데이트 확인
$ kubectl get pod -w
NAME READY STATUS RESTARTS AGE
tomcat-7447869cb8-vwr5s 0/1 ContainerCreating 0 9s
tomcat-7989d99887-nrhgl 1/1 Running 0 18m
로드밸런서 및 노드포트 접속확인
$ curl 34.64.239.127
$ curl 34.64.177.86:30002
인그레스의 필요성
- 인그레스는 하나의 IP이나 도메인으로 다수의 서비스 제공
ingress (어떤 장소에) 들어감, 입장; 들어갈 수 있는 권리, 입장권
인그레스 생성하기
http-go-ingress.yaml
인그레스 정보 확인 및 접속
- 접속을 위해서는 반드시 룰에 일치되어야 하므로 HTTP 요청의 host가 gasbugs.com 값을 가질 수 있도록 설정 (/etc/hosts를 변경)
- 만약 ADDRESS가 장시간 설정되지 않는다면 연결할 노드포트와 포드가 제대로 올라와있는지 확인해야 함.
$ kubectl get ingresses
NAME HOSTS ADDRESS PORTS AGE
http-go-ingress gasbugs.com 34.120.67.97 80 56s
$ sudo vim /etc/hosts
34.120.67.97 gasbugs.com
$ curl http://gasbugs.com
Welcome! http-go-6d46d6c74d-q6hwh
다수의 서비스를 제공하고 싶을 때는?
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
http-go www.gasbugs.com dict.gasbugs.com map.gasbugs.com 34.120.67.97 80 56s
$ sudo vim /etc/hosts
34.120.67.97 www.gasbugs.com dict.gasbugs.com map.gasbugs.com
$ curl www.gasbugs.com
Welcome! http-go-6d46d6c74d-q6hwh
$ curl dict.gasbugs.com
Welcome! http-go-6d46d6c74d-q6hwh
$ curl map.gasbugs.com
Welcome! http-go-6d46d6c74d-q6hwh
인그레스 HTTPS 서비스하기
- TLS 인증성 생성
$ openssl genrsa -out tls.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
.....+++++
.....................................................................+++++
e is 65537 (0x010001)
$ openssl req -new -x509 -key tls.key -out tls.cert -days 360 -subj /CN=www.gasbugs.com
$ kubectl create secret tls tls-secret --cert=tls.cert --key=tls.key
secret/tls-secret created
$ curl -k https://www.gasbugs.com
Welcome! http-go-rs-vsf5n
-k 옵션: Allow connections to SSL sites without certs (H)
실습
- http-go-deploy.yaml create
$ kubectl create -f http-go-deploy.yaml
service/http-go-svc created
deployment.apps/http-go created
설정 ClusterIP -> NodePort 수정
$ kubectl edit svc http-go-svc
service/http-go-svc edited
...
sepc:
...
type: NodePort
- http-go-ingress.yaml create
https://kubernetes.io/docs/concepts/services-networking/ingress/#the-ingress-resource
내용 복사 후 수정
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: http-go-ingress
spec:
rules:
- host: gasbugs.com
http:
paths:
- path: /
backend:
serviceName: http-go-svc
servicePort: 80
create
$ kubectl create -f http-go-ingress.yaml
ingress.networking.k8s.io/http-go-ingress created
- ingress 생성 확인
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
http-go-ingress gasbugs.com 34.120.67.97 80 56s
- 접속 확인
curl 34.120.67.97
/etc/hosts
에 임시로 도메인 정보 추가
34.120.67.97 gasbugs.com
다시 접속 확인 시 정상응답
$ curl gasbugs.com
Welcome! http-go-6d46d6c74d-q6hwh
연습문제
- tomcat, http-go를 ingress로 서비스하기 (tomcat.example.com, http-go.example.com 도메인 사용)
- GKE에서 인그레스를 활용한 로드밸런싱 프로세스 확인
- ingress-tomcat-http-go.yaml create
https://www.notion.so/gasbugs/1ad380a39042434ba71ae286c1560af8
내용 복사 후 create
$ kubectl create -f ingress-tomcat-http-go.yaml
ingress.extensions/tomcat-http-go-ingress created
deployment.apps/deploy-tomcat created
deployment.apps/http-go created
service/http-go created
service/tomcat created
- 방화벽 정책 추가
$ gcloud compute firewall-rules create rule1 --allow tcp:30001-30002
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/freework-gke-test-20201227/global/firewalls/rule1].
Creating firewall...done.
NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED
rule1 default INGRESS 1000 tcp:30001-30002 False
- tis 인증서 추가
kubectl delete secret tls-secret
openssl genrsa -out tls.key 2048
openssl req -new -x509 -key tls.key -out tls.cert -days 360 -subj /CN=tomcat.gasbugs.com
kubectl create secret tls tls-secret --cert=tls.cert --key=tls.key
- 생성 확인
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
http-go-ingress gasbugs.com 34.120.67.97 80 54m
tomcat-http-go-ingress tomcat.gasbugs.com,http-go.gasbugs.com 35.227.204.85 80, 443 35m
- /etc/hosts 에 ip 및 host 정보 추가
34.120.67.97 gasbugs.com
35.227.204.85 tomcat.gasbugs.com
35.227.204.85 http-go.gasbugs.com
- 접속 확인
curl -k https://tomcat.gasbugs.com
curl -k http-go.gasbugs.com
'개발강의정리 > DevOps' 카테고리의 다른 글
[데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심개념-Storage (0) | 2021.01.03 |
---|---|
[데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심개념-Network (0) | 2021.01.03 |
[데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심 개념-Namespaces (0) | 2020.12.27 |
[데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심 개념-애플리케이션 롤링 업데이트와 롤백 (0) | 2020.12.04 |
[데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심 개념-디플로이먼트 (0) | 2020.12.01 |
댓글