前回 は、Ampere A1 VM に Kubernetes をインストールしたので、その上に Ingress を載せる。
今回は、以下のように、 httpd の Pod と nginx の Pod をパスによってルーティングする。
+---------------+ +-------+
+->| httpd service |->| httpd |
+---------+ HOST_NAME/httpd | +---------------+ +-------+
| |-----------------+
| Ingress | +---------------+ +-------+
| |------------------->| nginx service |->| nginx |
+---------+ HOST_NAME/nginx +---------------+ +-------+
Helm のインストール
Kubernetes 上にデプロイする必須アプリは、 Helm でデプロイする。
curl https://helm.baltorepo.com/organization/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
Ingress のインストール
Helm を使ってインストール。
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --set controller.hostNetwork=true --create-namespace
--set controller.hostNetwork=true
: ホストネットワークをtrue
にすることで、このホストへの IP アドレスで Ingress へ届くようになる
MetalLB のインストール
Ingress のロードバランス機能を提供するアプリらしい。こちらも Helm でインストールする。
# MetalLB のための ConfigMap 設定
kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system
helm repo add metallb https://metallb.github.io/metallb
cat | tee ./metallb-value.yaml <<EOF
configInline:
address-pools:
- name: default
protocol: layer2
addresses:
- 10.244.0.0/16
EOF
helm upgrade --install metallb metallb/metallb \
-n metallb-system --create-namespace -f metallb-value.yaml
別途 metallb-value.yaml
を作成し、アドレス範囲を設定することで、 Ingress への IP
払い出しが行われるようだ。
アプリをデプロイし、 Ingress を使ってルーティングする
以下のような形で、パスに httpd
がきたか
nginx
が来たかに応じて接続先サービスを変更する。
+---------------+ +-------+
+->| httpd service |->| httpd |
+---------+ HOST_NAME/httpd | +---------------+ +-------+
| |-----------------+
| Ingress | +---------------+ +-------+
| |------------------->| nginx service |->| nginx |
+---------+ HOST_NAME/nginx +---------------+ +-------+
httpd のデプロイ
Deployment
, Service
, Ingress
を作成する。
DOMAIN="138-2-38-86.nip.io"
cat > ./httpd.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd-deployment
spec:
selector:
matchLabels:
app: httpd
replicas: 1
template:
metadata:
labels:
app: httpd
spec:
containers:
- name: httpd
image: httpd
ports:
- containerPort: 80
EOF
kubectl apply -f ./httpd.yaml
cat > ./httpd-service.yaml <<EOF
apiVersion: v1
kind: Service
metadata:
name: httpd-service
labels:
app: httpd
spec:
selector:
app: httpd
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
EOF
kubectl apply -f ./httpd-service.yaml
cat > ./httpd-ingress.yaml <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: httpd-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: ${DOMAIN}
http:
paths:
- backend:
service:
name: httpd-service
port:
number: 80
path: /httpd
pathType: Prefix
EOF
kubectl apply -f ./httpd-ingress.yaml
ブラウザで http://${DOMAIN}
へ接続し、 httpd
のいつもの画面が表示されれば OK.
nginx のデプロイ
Deployment
, Service
, Ingress
を作成する。
DOMAIN="138-2-38-86.nip.io"
cat > ./nginx.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
EOF
kubectl apply -f ./nginx.yaml
cat > ./nginx-service.yaml <<EOF
apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
app: nginx
spec:
selector:
app: nginx
type: NodePort
ports:
- protocol: TCP
port: 8080
targetPort: 80
nodePort: 30080
EOF
kubectl apply -f ./nginx-service.yaml
cat > ./nginx-ingress.yaml <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: ${DOMAIN}
http:
paths:
- backend:
service:
name: nginx-service
port:
number: 80
path: /nginx
pathType: Prefix
EOF
kubectl apply -f ./nginx-ingress.yaml
ブラウザで http://${DOMAIN}
へ接続し、 nginx
のいつもの画面が表示されれば OK.
0 件のコメント:
コメントを投稿