'How to make Kubernetes Load balancer auto assign hostname to service like on aws
I'm trying to make kubernetes environment in my house using metallb Load balancer and Nginx ingress, currently I'm using cloudflare as an DNS and point wildcard domain to my house's IP
I've seen that in some cloud provider, loadbalancer will assign hostname/domain name to service automanticly which will show in status.loadbalancer.ingress[0].hostname example of loadbalancer status that have hostname
My point is, is it possible to do that and how.
This is my current NGINX ingress controller config
I have try service.beta.kubernetes.io/do-loadbalancer-name: my-domain-name but seem no hope yet.
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.I do have external IP route to the sample IP
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
