k8s 使本地集群支持 LoadBalancer 服务

k8s 使本地集群支持 LoadBalancer 服务

为了使本地集群支持 LoadBalancer 服务,可以参考以下两种实现方案:

这里我们选择使用 metalLB

metalLB 的部署很简单,直接使用 yaml 文件部署:

kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.3/manifests/metallb.yaml

具体参考 https://metallb.universe.tf/installation/

部署完成后需要为 LoadBalancer 服务选择一个特定的 IP 地址池,这里通过 configmap 来创建。

下面是一个简单示例:

$ cat metallb-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.58-192.168.1.60
kubectl create -f metallb-cm.yaml

更多高级配置请参考:https://metallb.universe.tf/configuration/

测试

创建一个 Nginx 的服务,服务类型为 LoadBalancer

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1
        ports:
        - name: http
          containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

服务创建运行之后,可以列出服务信息:

kubectl get svc
NAME       TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)         AGE
kube-dns   ClusterIP      10.96.0.10      <none>          53/UDP,53/TCP   7d
nginx      LoadBalancer   10.96.245.212   10.211.55.240   80:32207/TCP    54m

这里就发现,LoadBalancer 类型的服务,分配到了我们地址池中的第一个 IP。

用 curl http://10.211.55.240 验证,就会发现返回了 Nginx 的欢迎信息。




原文地址:https://www.cnblogs.com/fengjian2016/p/11936651.html