[kubernetes] lb-ingress-service, ConfigMap을 이용한 웹서비스 배포

Hoon·2022년 9월 7일
0

Kubernetes

목록 보기
3/7


ingress-container(LB) -> ingress -> VM's port1 or VM's port2 -> Node Port -> target Port

실습

kubectl api-resources | grep ingress : 버전 확인

  • vi ingress-config.yaml: deafult, shop, blog 서비스
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - http:
    paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: default
            port:
              number: 80
      - path: /shop
        pathType: Prefix
        backend:
          service:
            name: shop
            port: 80
      - path: /blog
        pathType: Prefix
        backend:
          service:
            name: blog
            port: 80

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.2/deploy/static/provider/cloud/deploy.yaml: ingress 컨트롤러 배포

  • vi shop-deploy-svc.yaml
cp shop-deploy-svc.yaml default-deploy-svc.yaml 
cp shop-deploy-svc.yaml blog-deploy-svc.yaml 
sed -i 's/shop/blog/g' blog-deploy-sve.yaml
sed -i 's/shop/default/g' default-deploy-sve.yaml

nodeport 아래와 같이 수정

  • default: 30000
  • shop: 30001
  • blog: 30002 <- 30002번 이미지는 httpd로 수정

배포

kubectl apply -f default-deploy-svc.yaml
kubectl apply -f shop-deploy-svc.yaml
kubectl apply -f blog-deploy-svc.yaml

현재까지 내용을 확인하기 위한 방법

master/manager 에서 curl 을 이용하여 노드포트를 통해 각 포드에 접속할 수 있는지 여부를 확인한다. 이는 클러스터 환경 외부(인터넷)에서의 접속을 확인하는 것은 아니고 내부적으로 정상 동작 여부를 확인하기 위한 것이다.
curl http://211.183.3.101:30000 -> nginx
curl http://211.183.3.101:30001 -> nginx
curl http://211.183.3.101:30002 -> httpd
마지막으로 위에서 작성했던 ingress-config.yaml을 배포한 뒤, kubectl get ing를 확인해 본다.
root@manager:~/k8slab/lab2# k get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-nginx none * 211.183.3.201 80 50s

결과 확인


윈도우에서 http://211.183.3.201 , http://211.183.3.201/shop, http://211.183.3.201/blog 확인


ConfigMap 이용하여 서비스 내용 수정

default: https://www.naver.com
shop: https://www.musinsa.com/app/
blog: https://www.kakaocorp.com
nginx -> default, shop
httpd -> blog
각각의 페이지는 configmap 을 이용하여 붙여넣기 해 보세요!!!
default(nginx) -> https://www.naver.com/
shop(nginx) -> https://www.coupang.com/
blog(httpd) -> https://www.kakaocorp.com/

아래와 같은 형태로 구조를 변경해 둔다.

├── blog
│   ├── blog-deploy-svc.yaml
│   └── index.html
├── default
│   ├── default-deploy-svc.yaml
│   └── index.html
├── ingress-config.yaml
└── shop
    ├── index.html
    └── shop-deploy-svc.yaml
curl -L http://www.naver.com > index.html
  • vi default-deploy-svc.yaml: default 예시. shop, blog도 각각 맞게 적용
apiVersion: apps/v1
kind: Deployment
metadata:
  name: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: default
  template:
    metadata:
      name: default
      labels:
        app: default
    spec:
      containers:
      - name: default
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - name: defaultvol
          mountPath: /usr/share/nginx/html
      volumes:
      - name: defaultvol
        configMap:
          name: defaultcm
---
apiVersion: v1
kind: Service
metadata:
  name: default
spec:
  ports:
  - name: default-port
    port: 80 # service's port
    targetPort: 80 # Pod's Port
    nodePort: 30000
  selector:
    app: default
  type: NodePort

서비스는 변경 내용 없음
kubectl create configmap defaultcm --from-file=index.html: configmap 생성 후 재배포

Secret

  • 일반적인 사용방법은 configMap과 거의 동일하지만, 저장된 secret을 describe를 통해 확인할 수는 없다.
  • ssh, key, 인증서, username/password 등을 Pod 내에 전달할 때 주로 사용한다.
  • 사설 저장소를 사용하는 경우 각 노드는 사설 저장소로 접속하기 위한 인증정보를 보유하고 있어야 한다. 인증정보에 포함되는 요소들은 username, password, 저장소의 주소


kubectl create secret generic dockerhub1 \ --from-file=.dockerconfigjson=/root/.docker/config.json \ --type=kubernetes.io/dockerconfigjson

docker-registry -> 현재 만드는 secret 은 일반적인 generic 이 아니라 도커 저장소에 접속을 위한 secret 으로 사용된다.(type 지정)
regcred -> secret 이름
--docker-server=사설저장소주소

[활용]

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: test-oracle
    image: oraclelinux:latest
  imagePullSecrets:
  - name: dockerhub1

kubectl create secret generic dockerhub1 \ --from-file=.dockerconfigjson=/root/.docker/config.json \ --type=kubernetes.io/dockerconfigjson : secret 파일생성

0개의 댓글