kubernetes - 如何修复 k3s 上 nginx 入口的空外部 IP?
问题描述
我想为我的 k3s 集群使用 metallb 和 nginx 入口。
目前外部IP是<none>
kubectl -n ingress-nginx get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller-admission ClusterIP 10.43.182.71 <none> 443/TCP 14m
ingress-nginx-controller NodePort 10.43.221.32 <none> 80:31121/TCP,443:31807/TCP 14m
我希望它是192.168.178.240
我安装了k3s
export K3S_KUBECONFIG_MODE="644"
export INSTALL_K3S_EXEC=" --disable servicelb --disable traefik"
export KUBECONFIG="~/.kube/config:/etc/rancher/k3s/k3s.yaml"
curl -sfL https://get.k3s.io | sh -
然后我安装了metallb
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.6/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.6/manifests/metallb.yaml
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
与配置kubectl apply -f config.yaml
config.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.178.240-192.168.178.250
然后我安装了 nginx 入口裸机
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.45.0/deploy/static/provider/baremetal/deploy.yaml
所有 pod 都在运行
% k3s kubectl get pods --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system metrics-server-86cbb8457f-xmp4w 1/1 Running 0 42m 10.42.0.3 master-pi4 <none> <none>
kube-system coredns-854c77959c-vlpxf 1/1 Running 0 42m 10.42.0.2 master-pi4 <none> <none>
kube-system local-path-provisioner-5ff76fc89d-l6nmk 1/1 Running 0 42m 10.42.0.4 master-pi4 <none> <none>
metallb-system speaker-zghmh 1/1 Running 0 40m 192.168.178.37 master-pi4 <none> <none>
metallb-system controller-64f86798cc-bgcvw 1/1 Running 0 40m 10.42.1.2 node1-pi4 <none> <none>
metallb-system speaker-cjjl4 1/1 Running 0 40m 192.168.178.240 node1-pi4 <none> <none>
metallb-system speaker-pnmzm 1/1 Running 0 40m 192.168.178.35 node2-pi3 <none> <none>
ingress-nginx ingress-nginx-admission-patch-kmt2s 0/1 Completed 1 19m 10.42.0.5 master-pi4 <none> <none>
ingress-nginx ingress-nginx-admission-create-7j98l 0/1 Completed 0 19m 10.42.0.6 master-pi4 <none> <none>
ingress-nginx ingress-nginx-controller-7b78df5bb4-6t2jz 1/1 Running 0 19m 10.42.1.3 node1-pi4 <none> <none>
为什么入口控制器没有分配外部 IP?
解决方案
在deploy.yml中,Service 被定义为NodePort
必须更改为LoadBalancer
. 然后 nginx 入口将作为负载均衡器运行。
推荐阅读
- python - 预期 input_1 的形状为 (224, 224, 3) 但得到的数组的形状为 (400, 401, 3)
- c# - 在使用 C# .NET Core 3 中使用 SSL 证书连接到 MySQL 数据库
- javascript - 如何将 observable 应用于复选框以验证它是否被选中,从而能够重新加载我的应用程序页面?
- javascript - 如何在 JavaScript 中过滤嵌套的嵌套对象?
- encoding - 网站输出奇怪的字符编码
- tcp - 无法从 Coturn 服务器获取 ICE TCP 中继候选
- coldfusion - Firebird Jaybird 2.2.10 / ColdFusion 2018 - 字符串长度错误
- odata - 从 Microsoft Graph API 消息中获取对话
- android - Firebase App Distribution 发现此变体的输出文件超过 1 个
- python - python - 在循环中创建变量然后分配