使用 NginxIngress 配置 MetalLB 以接受来自 Internet 的请求

使用 NginxIngress 配置 MetalLB 以接受来自 Internet 的请求

我们在裸机云(OVH Cloud)上的一台虚拟机上部署了 Minikube。

  • Kubernetes 版本:v1.28.3
  • 安装方式:Minikube
  • 主机操作系统:Debian 10
  • CRI 和版本:docker://24.0.7

我们已经部署了 Nginx Ingress 和 MetalLB,但找不到从外部(服务器的公共 IP)连接到集群的方法。我们想要做的是有一个单一的集群入口点,监听 :80 和 :443,然后将请求分发到集群内的目标服务。

如果我们尝试与 Web 应用程序进行内部通信(带有卷曲)它给了我们一个回应,但没有办法从互联网上得到同样的回应

可能重复的(我见过它们,但似乎对我们不起作用):

请记住我是 Kubernetes 的新手。

基本上我们遵循了这个教程(https://www.youtube.com/watch?v=k8bxtsWe9qw

使用 Helm 部署 Nginx Ingress

helm install nginx-ingress oci://ghcr.io/nginxinc/charts/nginx-ingress --version 0.17.1 --namespace nginx-ingress

使用 MANIFEST 部署的 MetalLB

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.9/config/manifests/metallb-native.yaml

IP地址池:

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.XXX.XX.XX-192.XXX.XX.XX

对于我们尝试过的地址:

  • minikube 内部 IP 范围在 10 个 IP 之间
  • 我们也尝试使用 <minikube_internal_IP>/32 的单个 IP
  • 我们还尝试使用 <SERVER_PUBLIC_IP>/32 的单个 IP

L2广告

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: homelab-l2
  namespace: metallb-system
spec:
  ipAddressPools:
  - first-pool

一个简单的APP部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  labels:
    app.kubernetes.io/name: web-app
  name: web-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: web-app
  template:
    metadata:
      labels:
        app.kubernetes.io/name: web-app
    spec:
      containers:
      - image: nginx
        name: web-app
        command: 
          - /bin/sh
          - -c
          - "echo 'welcome to my web app!' > /usr/share/nginx/html/index.html && nginx -g 'daemon off;'"
      dnsConfig:
            options:
              - name: ndots
                value: "2"

---

apiVersion: v1
kind: Service
metadata:
  name: web-app
  labels:
    app.kubernetes.io/name: web-app
spec:
  selector:
    app.kubernetes.io/name: web-app
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80

应用程序的入口:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-app
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: web-app.home-k8s.lab
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-app
            port:
              number: 80

相关内容