【k8s】尝试在VPS上搭建的Kubernetes集群进行公开的经历

首先

这篇文章是”创建家中的Kubernetes环境”系列的一部分。上一篇文章已经介绍了在minikube上搭建Next.js + nginx服务器的步骤。

 

这次,我打算在之前搭建的VPS上的Kubernetes集群上部署Next.js + Nginx服务器。

 

我已经把完成品放在Github上进行了公开,仅供参考,请查看。
(本次涉及的项目是kubernetes/metallb和kubernetes/portfolio)。
https://github.com/piny940/infra/tree/main/kubernetes

环境

    • lemon: Kagoya Cloud VPS 2コア 2GB

 

    lime: Kagoya Cloud VPS 2コア 2GB

(lemon和lime是机器的名称)

    • デプロイツール: kubeadm

 

    • CRI: cri-dockerd

 

    CNI: Weave net

安装 ingress-nginx

首先,我们要安装ingress-nginx。(我曾因为忘记安装它而苦恼了几十分钟)

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml

安装MetalLB。

下一步是安装MetalLB。
这是什么呢?AWS等云服务提供的k8s服务(如EKS)可以为类型为LoadBalancer的Service提供从外部访问的机制。但在VPS或本地服务器上,这种机制并不存在。因此,MetalLB可以提供一种让Service在外部公开访问的替代方式。
关于MetalLB的详细说明,这个网站讲得很清楚。

我会按照文件的指示进行安装。

# see what changes would be made, returns nonzero returncode if different
kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl diff -f - -n kube-system

# actually apply the changes, returns nonzero returncode on errors only
kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system$ kubectl edit configmap -n kube-system kube-proxy

为了在以后的kubeadm init过程中无需进行此配置,我们可以将下面的代码添加到kubeadm-config.yaml文件中。

apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
  strictARP: true

使用Kustomize进行了安装。

namespace: metallb-system

resources:
  - github.com/metallb/metallb/config/native?ref=v0.13.12

記述IPAddressPool和L2Advertisement的设置。

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default
  namespace: metallb-system
spec:
  addresses:
    - 192.168.11.61-192.168.11.70
  autoAssign: true
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: default
  namespace: metallb-system
spec:
  ipAddressPools:
    - default

在kustomization.yaml文件中将此配置文件添加到resources中。

namespace: metallb-system

resources:
  - github.com/metallb/metallb/config/native?ref=v0.13.12
  - config.yaml

最后我们进行kubectl apply操作。

$ kubectl apply -k metallb

Next.js的部署

这是关于Next.js应用的部署。

$ kubectl apply -k .

我认为通过查看服务,我们可以确认Ingress-Nginx控制器已经设置了EXTERNAL-IP,这样部署工作就完成了。

kubectl get service -A
NAMESPACE        NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE
default          kubernetes                           ClusterIP      10.96.0.1        <none>          443/TCP                      4d7h
default          {アプリ名}                            ClusterIP      10.106.129.21    <none>          4400/TCP                     8h
ingress-nginx    ingress-nginx-controller             LoadBalancer   10.109.36.122    192.168.11.61   80:30292/TCP,443:31968/TCP   6h22m
ingress-nginx    ingress-nginx-controller-admission   ClusterIP      10.106.213.123   <none>          443/TCP                      6h22m
kube-system      kube-dns                             ClusterIP      10.96.0.10       <none>          53/UDP,53/TCP,9153/TCP       4d7h
metallb-system   webhook-service                      ClusterIP      10.111.253.56    <none>          443/TCP                      3m1s

当您在VPS上使用EXTERNAL-IP地址进行curl操作时,确实会返回nginx页面。

$ curl 192.168.11.61

在Cloudflare上发布

image.png
image.png

只要访问已在 Cloudflare 中设置的地址,应该可以显示 Next.js 的页面!

最終的に

這次我們在 VPS 上建立了 Kubernetes 集群,並部署了 Next.js + nginx 伺服器進行公開。下次我們將著手建立家用 Kubernetes 集群。

请查阅相关资料。

 

广告
将在 10 秒后关闭
bannerAds