Kubernetes Port Forwarding with kubefwd on Apple M1

kubefwd is a command line tool for Kubernetes Services and allows you to access any service from your local workstation in the same namespace on cluster. kubefwd temporally adds domain records to our /etc/hosts file with the service names it forwards.

Here is explaining the workflow from official GitHub repository:

https://github.com/txn2/kubefwd

and Screencast (it’s also from GitHub repository)

https://github.com/txn2/kubefwd

Installation with homebrew

  1. Requirement
    1. kubectl kubefwd assumes you have kubectl installed and configured with cluster access.

You can install kubefwd directly from txn2/tap.

brew install txn2/tap/kubefwd

To upgrade:

brew upgrade kubefwd

Testing

Create and run forwarding

Open Gitea-Service and install it. After installation i have a new repo created and my ssh key in to the my gitea profile added.

Cloning, Pushing…

Gitea Dashboard

Gitea Installation via Helm on Apple M1

Gitea? is aa community developed and managed simple, lightweight github alternative, written in Go.

Gitea provides a Helm Cart for installation on kubernetes, thats mean, if we would like to customize our install, we can do this.. But when not, we can directly use without any custom configuration/helm config.

Installation

helm repo add gitea-charts https://dl.gitea.io/charts/
helm repo update && helm install gitea gitea-charts/gitea
MBP-von-Koray ~ % helm repo update && helm install gitea gitea-charts/gitea
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "gitea-charts" chart repository
Update Complete. ⎈Happy Helming!⎈
NAME: gitea
LAST DEPLOYED: Sun Aug  1 14:07:36 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  echo "Visit http://127.0.0.1:3000 to use your application"
  kubectl --namespace default port-forward svc/gitea-http 3000:3000

And starting port-forwarding for Port 3000.

kubectl --namespace default port-forward svc/gitea-http 3000:3000

and here is.. Enjoy 😊

To customize your install, here is the complete configuration details.

Gitlab Installation WSL2 + Docker + Kubernetes + Helm 3

helm create gitlab gitlab/gitlab
kubectl create namespace gitlab

gitlab/values.yaml

## GitLab Edition
### ref: https://about.gitlab.com/products/
### - CE - Community Edition
### - EE - Enterprise Edition - (requires license issued by GitLab Inc)
###
edition: CE
#
### GitLab CE image
### ref: https://hub.docker.com/r/gitlab/gitlab-ce/tags/
###
ceImage: gitlab/gitlab-ce:9.1.2-ce.0

certmanager-issuer:
  email: me@myserver.com

## Enable persistence using Persistent Volume Claims
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
## ref: https://docs.gitlab.com/ce/install/requirements.html#storage
##
persistence:
  ## This volume persists generated configuration files, keys, and certs.
  ##
  gitlabEtc:
    enabled: true
    size: 1Gi
    ## If defined, volume.beta.kubernetes.io/storage-class: <storageClass>
    ## Default: volume.alpha.kubernetes.io/storage-class: default
    ##
    # storageClass:
    accessMode: ReadWriteOnce
  ## This volume is used to store git data and other project files.
  ## ref: https://docs.gitlab.com/omnibus/settings/configuration.html#storing-git-data-in-an-alternative-directory
  ##
  gitlabData:
    enabled: true
    size: 10Gi
    ## If defined, volume.beta.kubernetes.io/storage-class: <storageClass>
    ## Default: volume.alpha.kubernetes.io/storage-class: default
    ##
    # storageClass:
    accessMode: ReadWriteOnce
  gitlabRegistry:
    enabled: true
    size: 10Gi
    ## If defined, volume.beta.kubernetes.io/storage-class: <storageClass>
    ## Default: volume.alpha.kubernetes.io/storage-class: default
    ##
    # storageClass:

  postgresql:
    persistence:
      # storageClass:
      size: 10Gi
  ## Configuration values for the Redis dependency.
  ## ref: https://github.com/kubernetes/charts/blob/master/stable/redis/README.md
  ##
  redis:
    persistence:
      # storageClass:
      size: 10Gi


externalUrl: 'https://gitlab.local'

omnibusConfigRuby: |
  # This is example config of what you may already have in your omnibusConfigRuby object
  unicorn['worker_processes'] = 2;
  gitlab_rails['trusted_proxies'] = ["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16"];

  registry_external_url 'https://containerregistry.local';

  # These are the settings needed to support proxied SSL
  nginx['listen_port'] = 80
  nginx['listen_https'] = false
  nginx['proxy_set_headers'] = {
    "X-Forwarded-Proto" => "https",
    "X-Forwarded-Ssl" => "on"
  }
  registry_nginx['listen_port'] = 80
  registry_nginx['listen_https'] = false
  registry_nginx['proxy_set_headers'] = {
    "X-Forwarded-Proto" => "https",
    "X-Forwarded-Ssl" => "on"
  }

ingress:
  enabled: true
  annotations:
   kubernetes.io/ingress.class: nginx
   # kubernetes.io/tls-acme: 'true' Annotation used for letsencrypt support

  hosts:
    - gitlab.local
    - containerregistry.local

    ## gitlab Ingress TLS configuration
    ## Secrets must be created in the namespace, and is not done for you in this chart

#    tls:
#      - secretName: gitlab-tls
#        hosts:
#          - gitlab.local
#          - containerregistry.local
helm install --namespace=gitlab gitlab -f values.yaml gitlab/gitlab

Create Docker Image with Tag from .tar file and push in Private Docker Registery

Create Docker Image from .tar file

$ docker load --input my-dockerized-app-0.0.1.tar

Create a tag.

Before tag creating, i will learn my source image/newly created docker image ID for the tag creating command..

 $ docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

we can find that via “docker image ls”, but put the grep command, because i want only the same name having images seen, what I as grep argument given.

$ docker image ls | grep my-docker
my-dockerized-app                        0.0.1       c0f32faf4320   1 minute ago      

And now i can create a new tag for local or for private docker registry

Option 1. Tag for Only Local Using

$ docker tag c0f32faf4320 my-dockerized-app:0.0.1

Option 2. Tag for Local and over Local/Open Registry

$ docker tag c0f32faf4320 docker.d8devs.com/apps/my-dockerized-app:0.0.1
$ docker push docker.d8devs.com/apps/my-dockerized-app:0.0.1

Example Usage:

in docker-compose.yml

version: '3'
services:
    frontend:
        image: my-dockerized-app:0.0.1
......
.....
....

for Kubernetes deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deployment
  labels:
    app: app-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app-test
  template:
    metadata:
      labels:
        app: app-test
    spec:
      containers:
      - name: frontend
        image: my-dockerized-app:0.0.1 // or docker.d8devs.com/apps/my-dockerized-app:0.0.1 (dont forget use the imagePullSecrets for privat Registry)