ingress-nginx
하나의 아이피에 각각의 도메인마다 각자의 서비스로 보내주고 싶다. 구성은 다음 그림과 같다.
기본 pod and service 생성
vi hello-node.yml
---
apiVersion: v1
kind: Pod
metadata:
name: hello-node
labels:
service-name: hello-node
spec:
containers:
- name: hello-node
image: asbubam/hello-node
---
apiVersion: v1
kind: Service
metadata:
name: hello-node
spec:
ports:
- port: 8080
targetPort: 8080
selector:
service-name: hello-node
kubectl create -f hello-node.yml
잘됬는지 체크
kubectl get pods
kubectl get svc
현재까지 구성은 다음과 같다.
ingress 설치
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
로드발란스 타입의 ingress 서비스
metallb를 꼭 설치하시기바랍니다.
- ingress-nginx 서비스는 namespace가 꼭 ingress-nginx 로 해야한다.
- ingress-config에서는 연결하는 서비스에 namespace와 같은 곳에 ingress를 설치 해야한다.
vi ingress-service.yml
---
apiVersion: v1
kind: Service
metadata:
name: ingress-service # 이부분 수정 하지 말자.
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx # 이부분 수정 하지 말자.
app.kubernetes.io/part-of: ingress-nginx # 이부분 수정 하지 말자.
spec:
type: LoadBalancer
loadBalancerIP: 192.168.0.84
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
- name: https
port: 443
targetPort: 443
protocol: TCP
selector:
app.kubernetes.io/name: ingress-nginx # 이부분 수정 하지 말자.
app.kubernetes.io/part-of: ingress-nginx # 이부분 수정 하지 말자.
kubectl create -f ingress-service.yml
vi ingress-domain-config.yml
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-nginx
namespace: default # 연결되는 서비스의 네임스페이스와 같아야한다.
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: lb.publishapi.com
http:
paths:
- backend:
serviceName: hello-node
servicePort: 8080
kubectl create -f ingress-domain-config.yml
vi /etc/hosts
192.168.0.84 lb.publishapi.com
curl http://192.168.0.84
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
<center><h1>404 Not Found</h1></center>
<hr />
<center>nginx/1.15.8</center>
</body>
</html>
curl http://lb.publishapi.com
Hello World!
현재까지 구성은 다음과 같다.
나머지는 ingress-domain-config.yml 에서 Ingress Rule 만 계속 추가하면 된다.