k8s 오픈소스를 사용하던중 GKE의 오토파일럿을 사용하면 간단하게 배포할 수 있다는 정보를 들었고 gke 솔루션을 활용하여 인프라에 대한 부담을 줄여보고자 합니다.
GKE autopilot 기능은 정말 간편했다 쿠버네티스의 공부를 따로하지않아도 사용이 가능할 수준이라고 생각되는데, 권장하는것은 GCP의 Cloud Build를 권장한다.
하지만 나는 내 인스턴스를 따로 관리하여 CI/CD 를 구축하고 싶었습니다.
그래서 따로 GCE 인스턴스를 생성하고 GKE 클러스터와 연동후 yml 파일을 생성해서 쉘 스크립트를 작성해 주었습니다.
GCE 를 생성하는데 밑에서 설정을 해줘야 scope 가 적용이 되어 GKE 에 접속 할 수있다.
sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
다음과 같이 설정한 후에 GKE 에서 제공하는 코드값을 GCE에 입력한다면 GCE에서 GKE 클러스터를 관리할 수 있습니다.
서버가 계속 죽었다 살아났다 하는 모습이 식별됐습니다.
로그를 확인하면 DB 와 연결이 잘 안된다는것을 알 수 있었다. AWS RDS 를 사용하고 있었기 때문에 DB 를 조회 해보니 Too many connections
가 나왔다. 서버 연결이 너무 자주 이루어 졌기 때문에 발생한 Issue 인것같아 wait_timeout 을 default 에서 180초로 설정 하였습니다.
해결되었고 아마 배포가 이루어지고 WAS 가 죽으면 DB Connection 을 놓아주어야 하는데 지속적으로 가지고 있어서 생긴 Issue 라고 추측됩니다.
기존의 gateway의 yml 을 수정하여 https 를 적용하고자 합니다
apiVersion: v1
kind: Service
metadata:
annotations:
cloud.google.com/neg: '{"ingress":true}'
creationTimestamp: "2023-08-05T04:08:01Z"
finalizers:
- service.kubernetes.io/load-balancer-cleanup
generateName: gateway-
labels:
baeker: gateway
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:finalizers:
.: {}
v:"service.kubernetes.io/load-balancer-cleanup": {}
f:status:
f:loadBalancer:
f:ingress: {}
manager: cloud-controller-manager
operation: Update
subresource: status
time: "2023-08-05T04:08:39Z"
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:generateName: {}
f:labels:
.: {}
f:baeker: {}
f:spec:
f:allocateLoadBalancerNodePorts: {}
f:externalTrafficPolicy: {}
f:internalTrafficPolicy: {}
f:ports:
.: {}
k:{"port":443,"protocol":"TCP"}:
.: {}
f:nodePort: {}
f:port: {}
f:protocol: {}
f:targetPort: {}
f:selector: {}
f:sessionAffinity: {}
f:type: {}
manager: GoogleCloudConsole
operation: Update
time: "2023-08-19T14:31:11Z"
name: gateway-54njn
namespace: gateway
resourceVersion: "24592083"
uid: 7ac2cb50-4418-4ae7-9ae1-57234bcd34dd
spec:
allocateLoadBalancerNodePorts: true
clusterIP: 10.22.129.101
clusterIPs:
- 10.22.129.101
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- nodePort: 31502
port: 80
protocol: TCP
targetPort: 9000
selector:
baeker: gateway
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: 34.64.245.180
2023-08-19T23:33:18.929+09:00 WARN 7 --- [or-http-epoll-1]
r.n.http.server.HttpServerOperations : [30d6483e,
L:/10.22.0.89:9000 - R:/10.178.15.206:65204] Decoding
failed: FULL_REQUEST(decodeResult:
failure(java.lang.IllegalArgumentException: invalid version
format: ????SNX????????O?X??LM???? ?+?/?,?
0????????/5???DIH2#H2HTTP/1.1), version:
HTTP/1.0, content:
UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteB
uf(ridx: 0, widx: 0, cap: 0))
apiVersion: v1
kind: Service
metadata:
annotations:
cloud.google.com/neg: '{"ingress":true}'
creationTimestamp: "2023-08-05T04:08:01Z"
finalizers:
- service.kubernetes.io/load-balancer-cleanup
generateName: gateway-
labels:
baeker: gateway
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:finalizers:
.: {}
v:"service.kubernetes.io/load-balancer-cleanup": {}
f:status:
f:loadBalancer:
f:ingress: {}
manager: cloud-controller-manager
operation: Update
subresource: status
time: "2023-08-05T04:08:39Z"
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:generateName: {}
f:labels:
.: {}
f:baeker: {}
f:spec:
f:allocateLoadBalancerNodePorts: {}
f:externalTrafficPolicy: {}
f:internalTrafficPolicy: {}
f:ports:
.: {}
k:{"port":443,"protocol":"TCP"}:
.: {}
f:nodePort: {}
f:port: {}
f:protocol: {}
f:targetPort: {}
f:selector: {}
f:sessionAffinity: {}
f:type: {}
manager: GoogleCloudConsole
operation: Update
time: "2023-08-19T14:31:11Z"
name: gateway-54njn
namespace: gateway
resourceVersion: "24592083"
uid: 7ac2cb50-4418-4ae7-9ae1-57234bcd34dd
spec:
allocateLoadBalancerNodePorts: true
clusterIP: 10.22.129.101
clusterIPs:
- 10.22.129.101
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- nodePort: 31502
port: 443
protocol: TCP
targetPort: 9000
selector:
baeker: gateway
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: 34.64.245.180
keystore 설정 후 port 80 -> 443 으로 변경 해주면 그 외 microserviced 에서의 별도의 설정없이 https 보안설정이 이루어집니다.
잘 봤습니다. 좋은 글 감사합니다.