我正在尝试使用 metallb 负载均衡器和 Nginx 入口在我家制作 kubernetes 环境,目前我正在使用 cloudflare 作为 DNS 并将通配符域指向我家的 IP
我已经看到,在某些云提供商中,负载均衡器会自动将主机名/域名分配给服务,这将显示在 status.loadbalancer.ingress[0].hostname 具有主机名的负载均衡器状态示例
我的观点是,是否有可能做到这一点以及如何做到这一点。
这是我目前尝试过的 NGINX 入口控制器配置,service.beta.kubernetes.io/do-loadbalancer-name: my-domain-name
但似乎还没有希望。
apiVersion: v1
kind: Service
metadata:
annotations:
field.cattle.io/publicEndpoints: '[{"addresses":["192.168.50.230"],"port":80,"protocol":"TCP","serviceName":"ingress-nginx:ingress-nginx-controller","allNodes":false},{"addresses":["192.168.50.230"],"port":443,"protocol":"TCP","serviceName":"ingress-nginx:ingress-nginx-controller","allNodes":false}]'
meta.helm.sh/release-name: ingress-nginx
meta.helm.sh/release-namespace: ingress-nginx
metallb.universe.tf/address-pool: external
service.beta.kubernetes.io/do-loadbalancer-name: my-domain-name
creationTimestamp: "2022-02-23T08:24:09Z"
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.1.1
helm.sh/chart: ingress-nginx-4.0.17
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
.: {}
f:meta.helm.sh/release-name: {}
f:meta.helm.sh/release-namespace: {}
f:labels:
.: {}
f:app.kubernetes.io/component: {}
f:app.kubernetes.io/instance: {}
f:app.kubernetes.io/managed-by: {}
f:app.kubernetes.io/name: {}
f:app.kubernetes.io/part-of: {}
f:app.kubernetes.io/version: {}
f:helm.sh/chart: {}
f:spec:
f:allocateLoadBalancerNodePorts: {}
f:externalTrafficPolicy: {}
f:internalTrafficPolicy: {}
f:ipFamilies: {}
f:ipFamilyPolicy: {}
f:ports:
.: {}
k:{"port":80,"protocol":"TCP"}:
.: {}
f:appProtocol: {}
f:name: {}
f:port: {}
f:protocol: {}
f:targetPort: {}
k:{"port":443,"protocol":"TCP"}:
.: {}
f:appProtocol: {}
f:name: {}
f:port: {}
f:protocol: {}
f:targetPort: {}
f:selector: {}
f:sessionAffinity: {}
f:type: {}
manager: helm
operation: Update
time: "2022-02-23T08:24:09Z"
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:status:
f:loadBalancer:
f:ingress: {}
manager: controller
operation: Update
subresource: status
time: "2022-02-23T08:24:10Z"
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
f:metallb.universe.tf/address-pool: {}
manager: kubectl-edit
operation: Update
time: "2022-02-23T08:31:25Z"
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
f:field.cattle.io/publicEndpoints: {}
f:service.beta.kubernetes.io/do-loadbalancer-name: {}
manager: rancher
operation: Update
time: "2022-02-23T08:35:58Z"
name: ingress-nginx-controller
namespace: ingress-nginx
resourceVersion: "1034624"
uid: 2c5c241c-c295-45bf-8192-91417486b4a5
spec:
allocateLoadBalancerNodePorts: true
clusterIP: 10.43.159.239
clusterIPs:
- 10.43.159.239
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- appProtocol: http
name: http
nodePort: 32481
port: 80
protocol: TCP
targetPort: http
- appProtocol: https
name: https
nodePort: 30398
port: 443
protocol: TCP
targetPort: https
selector:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: 192.168.50.230 #sample IP
PS.我确实有到示例 IP 的外部 IP 路由