'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