문제 개요

ServiceAccount 를 파드용으로 생성 후 파드에 적용

 

- ServiceAccount 생성(https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/  참고)

apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-sa
automountServiceAccountToken: false

 

- Pod 생성 후 ServiceAccount 적용

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: my-pod
  name: my-pod
spec:
  serviceAccountName: my-sa
  automountServiceAccountToken: false
  containers:
  - image: nginx
    name: my-pod

지난 글에서 Docker 로 Oracle 이미지 빌드하여 기동 하는 것 까지 테스트를 진행 했습니다

이번 에는 해당 Oracle 에 계정 생성 후 DBeaver 로 접속하는 방법을 확인해 보겠습니다

 

지난 글 : https://tistory-cloud.tistory.com/71 

 

Docker Oracle Image Build

Oracle 을 Docker 로 기동시키기 위해서는 이미지 가 필요 하다.물론 Docker hub 에 있는 이미지를 받앗 사용해도 되겠지만, 보안문제나 개인 설정을 추가하고 싶거나, 그냥 직접 해보고 싶은 경우에는

tistory-cloud.tistory.com

 

1. 기동중인 docker 접근

 docker exec -it [docker ID] bash

docker

2. Oracle DB 접속 및 계정 생성

sqlplus '/as sysdba'
create user yc identified by ycpassword;

위 명령어를 입력하면 아래와 같은 에러가 나타난다.

해당 내용을 구글링 해보니 공용 계정을 만들기 위해서는 ALTER SESSION SET "_ORACLE_SCRIPT"=true; 명령어를 입력 하여야 한다. 

위 명령어를 입력 후 아래와 같이 정상적으로 종료 되었다.

ALTER SESSION SET "_ORACLE_SCRIPT"=true;
create user yc identified by ycpassword;

 

3. DBeaver 접속 확인

- HOST : docker 가 수행중인 서버의 IP

- Database : ORACLE_SID

- ID/PW : 조금전에 생성한 계정 정보

위와 같이 입력 후 Test Connection 을 클릭하면 아래와 같이 나타난다.

계정에 접근할 권한이 없다는 것으로 보인다. Oracle DB 에서 아래의 명령어를 추가로 입력하고 접속 테스트를 진행

grant connect, resource to yc;

 

다시 Test Connection 을 클릭하면 아래와 같이 연결 된 것을 볼 수 있다.

'AWS' 카테고리의 다른 글

Docker Oracle Image Build  (3) 2024.07.14
RDS 이벤트 구독을 통한 RDS 관리  (1) 2024.01.07
EKS fargate 생성을 위한 설정  (0) 2023.12.18
AWS EC2 종료 Lambda with EventBridge  (0) 2023.11.28
AWS EKS LB Controller Install  (0) 2023.09.29

Oracle 을 Docker 로 기동시키기 위해서는 이미지 가 필요 하다.

물론 Docker hub 에 있는 이미지를 받앗 사용해도 되겠지만, 보안문제나 개인 설정을 추가하고 싶거나, 그냥 직접 해보고 싶은 경우에는 이미지를 직적 빌드하는 것이 기분이 좋다.


환경 OS RHEL 9

docker 설치 되어 있음, root 계정 사용


 

1. root 경로에 docker-oracle 폴더를 생성 후 아래 명령어 입력

git clone https://github.com/oracle/docker-images.git

 

2. 아래 경로에서 oracle 설치 파일 다운로드

https://www.oracle.com/database/technologies/oracle-database-software-downloads.html#19c

 

Database Software Downloads | Oracle

Oracle Database Software Downloads Whether you are a developer, a data scientist, a DBA, an educator, or just interested in databases, Oracle Database 23ai is the ideal way to get started. It provides native support for all modern data types, analytics, an

www.oracle.com

파일 다운로드가 완료되면 해당 파일을 아래 경로로 이동

 /root/docker-oracle/docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0

 

3. 이미지 빌드

 /root/docker-oracle/docker-images/OracleDatabase/SingleInstance/dockerfiles 경로에서 이미지 빌드

cd /root/docker-oracle/docker-images/OracleDatabase/SingleInstance/dockerfiles
./buildContainerImage.sh -v 19.3.0 -e

 

빌드 명령어 옵션 참고

약 5분 정도 지난 후 이미지 빌드 완료

 

4. docker 실행

docker run --name oracle-19c \
-e ORACLE_SID=myoracle \
-e ORACLE_PASSWORD=Oracle_2023 \
-p 1521:1521 \
-v /my-oracle/oracle-19c/oradata/:/opt/oracle/oradata \
oracle/database:19.3.0-ee

위와같이 입력하면 아래와 같은 에러가 발생

 

아래 내용을 구글링 해서 보니, docker 에서 실행할 때 리소스 제한이 걸리는데 해당 부분을 아래 명령어로 제어가 가능 하다는 거 같다.

 

https://docs.docker.com/reference/cli/docker/container/run/

 

docker run

 

docs.docker.com

 

그래서 아래와 같이 해당 옵션을 추가하고 실행 하였고 약 20분 정도 뒤에 docker 가 정상적으로 실행 되었다.

docker 실행하면서 oracle 초기화 작업이 진행 되는데 이작업이 생각보다 오래 걸렸다.

이미지 빌드할때 라이트 버전과 빠른 실행 버전이 별도로 있는것 같으니, 다음번 테스트때는 해당 이미지로 빌드 해보는것도 좋을것 같다.

docker run --name oracle-19c \
--ulimit nofile=1024:65536 \
-e ORACLE_SID=myoracle \
-e ORACLE_PASSWORD=Oracle_2023 \
-p 1521:1521 \
-v /my-oracle/oracle-19c/oradata/:/opt/oracle/oradata \
oracle/database:19.3.0-ee

 

docker oracle 로그

위와 같이 DATABASE IS READY TO USE!  가 나타나면 정상적으로 실행이 된 상태이다

 

다음 글에서는 Oracle 접속하여 계정생성 및 DBeaver 접속 확인 해보도록 하겠습니다

 

 

 

 

 

 

 

 

ingrss 란 여러가지 조건에 따라 트래픽 라우팅을 설정해 주는 서비스이다.

AWS 로 예를들면 ALB 와 동일하다고 생각하면 된다. 

설정할 수 있는 조건으로는 host 와 path 등이 있고, ingress 를 사용하기 위해서는 ingress-controller 가 설치 되어 있어야 한다.


예제

  • Nginx Deployment 와 Service 가 Cluster 내부에서 기동 중
  • ingress controller 를 사용하여 외부에서 내부의 Nginx 서비스로 접근
  • Nginx ingress controller 는 아래의 경로를 통해 설치 

nginx ingress controller

https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters

 

Installation Guide - Ingress-Nginx Controller

Installation Guide There are multiple ways to install the Ingress-Nginx Controller: with Helm, using the project repository chart; with kubectl apply, using YAML manifests; with specific addons (e.g. for minikube or MicroK8s). On most Kubernetes clusters,

kubernetes.github.io

 


  • Deploy, Service, Ingress 배포
  • 배포 후 Nginx-ingress-controller 의 서비스 인 ingress-nginx-controller 의 ip:port 형식으로 호출하여야 한다
  • ingress 에서 path 를 /test 로 설정하였으므로, 호출시 ip:port/test 를 하면 클러스터 내부의 nignx 응답을 받을 수 있다
---
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: nginx
spec:
  ports:
  - port: 31100
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
---
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /test
        pathType: Prefix
        backend:
          service:
            name: nginx
            port:
              number: 31100
  • 제 횐경에서의 ingress-nginx-controller 는 30303 포트이므로 NodeIP:30303/test 를 하게되면 ingress 를 통해서 nignx 가 호출 된다

'k8s > CKAD' 카테고리의 다른 글

NetworkPolicy 개념 정리  (0) 2024.01.20
[CKAD] Secret 생성 후 Pod 에 env 로 사용  (0) 2023.12.01
[CKAD]k8s Job / CronJob  (0) 2023.09.10
[CKAD]Docker image build  (0) 2023.09.09

 

k8s 내부에서 pod 간의 통신을 제어할때 NetworkPolicy 를 사용하여 제어 할 수 있다.

간단한 예로 NetworkPolicy 적용 예를 살펴 보자


조건

1. 파드명이 db인 파드와 web인 파드가 있다

2. 파드명이 db인 파드는 파드명이 web  에서 오는 통신만 허용 하여야 한다

 


상세설명

[db pod yaml]

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: db
  name: db
  namespace: np-test
spec:
  containers:
  - image: nginx
    name: db

 

[web pod yaml]

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
  namespace: np-test
spec:
  containers:
  - image: nginx
    name: web

 

[NetworkPolicy]

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: np-test
spec:
  podSelector:
    matchLabels:
      app: db
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: web
  • NetworkPolicy 의 spec.podSelector 는 대사이 되는 파드를 지정하는 곳이다
  • matchLabels 가 app: db 로 설정 되어 있는내용은, 레이블 값이 app: db 인 파드는 아래 policy 의 정책을 적용 받는다 라는 내용이다
  • policyTypes 는 Ingress, Egress 조건을 지정한다
  • spec.ingress.from.podSelector 부분은 ingress 를 허용할 조건을 가진 파드를 명시한다
  • matchLabels 가 app: web 으로 되어 있는 부분은, 레이블 값이 app: web 인 파드만 위에 명시된 app: db 가 포함된 파드에 트래픽을 허용한다

위에 명시된 yaml 파일을 전부 배포후 테스트

 

1. web pod 에서 db pod 로 통신 확인

2. NetworkPolicy 에서 ingress 부분 삭제 후 통신 여부 테스트

- 아래 처럼 spec.ingress.from.podSelector를  app:was 로 설정하면 app: was 레이블을 가진 파드만 db 파드로 통신이 허용됨

- 아래 yaml로 NetworkPolicy 배포(수정) 후 통신 확인

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: np-test
spec:
  podSelector:
    matchLabels:
      app: db
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: was

 

NetworkPolicy 수정

 

아래와 같이 동일한 명령어지만 통신이 불가 한 것을 확인 할 수 있다

'k8s > CKAD' 카테고리의 다른 글

ingress 개념 정리  (1) 2024.01.21
[CKAD] Secret 생성 후 Pod 에 env 로 사용  (0) 2023.12.01
[CKAD]k8s Job / CronJob  (0) 2023.09.10
[CKAD]Docker image build  (0) 2023.09.09

+ Recent posts