kubernetesyamlgeth

NodePort to a Geth pod doesn't work on k8s


I'm trying to deploy Geth(ethereum/client-go) pod on k8s. But I can't deploy the pod with error "Fatal: Error starting protocol stack: listen tcp: lookup "192.168.1.10": no such host".

My deploy.yaml is here.

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: chaindatastorage
spec:
  capacity:
    storage: 1000Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-ssd-storage
  local:
    path: /k8sNodeData/ethDataDir
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: disktype
          operator: In
          values:
          - ssd
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: chaindatavolumeclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 1000Gi
  storageClassName: local-ssd-storage
---
apiVersion: v1
kind: Service
metadata:
  name: geth-port
spec:
  type: NodePort
  ports:
    - name: geth-sync-port
      port: 30303
      targetPort: 30303
      nodePort: 30303
    - name: geth-rpc-port
      port: 8545
      targetPort: 8545
      nodePort: 8545
  selector:
    name: gethnode
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gethnodedeployment
spec:
  replicas: 1
  selector:
    matchLabels:
      name: gethnode
  template:
    metadata:
      labels:
        name: gethnode
    spec:
      containers:
      - name: gethnode
        image: ethereum/client-go
        args:
        - "--syncmode=full"
        - "--maxpeers=80"
        - "--cache=8192"
        - "--http"
        - "--http.addr=\"192.168.1.10\""
        - "--http.port=8545"
        volumeMounts:
          - name: gethchaindata
            mountPath: /root/.ethereum
        resources:
          limits:
            memory: 20480Mi
            cpu: 4000m
      volumes:
        - name: gethchaindata
          persistentVolumeClaim:
            claimName: chaindatavolumeclaim
---

The results of kubectl get service is here.

NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
geth-port                 NodePort    10.110.121.244   <none>        30303:30303/TCP,8545:8545/TCP   78s
kubernetes                ClusterIP   10.96.0.1        <none>        443/TCP                         29d

The results of kubectl get logs of the pod is here.

INFO [10-03|09:40:33.482] Starting Geth on Ethereum mainnet... 
INFO [10-03|09:40:33.483] Maximum peer count                       ETH=80 LES=0 total=80
INFO [10-03|09:40:33.483] Smartcard socket not found, disabling    err="stat /run/pcscd/pcscd.comm: no such file or directory"
ERROR[10-03|09:40:33.483] Failed to enumerate USB devices          hub=ledger vendor=11415 failcount=1 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[10-03|09:40:33.483] Failed to enumerate USB devices          hub=trezor vendor=21324 failcount=1 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[10-03|09:40:33.483] Failed to enumerate USB devices          hub=trezor vendor=4617  failcount=1 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[10-03|09:40:33.483] Failed to enumerate USB devices          hub=ledger vendor=11415 failcount=2 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[10-03|09:40:33.483] Failed to enumerate USB devices          hub=trezor vendor=21324 failcount=2 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[10-03|09:40:33.483] Failed to enumerate USB devices          hub=trezor vendor=4617  failcount=2 err="failed to initialize libusb: libusb: unknown error [code -99]"
INFO [10-03|09:40:33.483] Set global gas cap                       cap=25000000
INFO [10-03|09:40:33.483] Allocated trie memory caches             clean=2.00GiB dirty=2.00GiB
INFO [10-03|09:40:33.483] Allocated cache and file handles         database=/root/.ethereum/geth/chaindata cache=4.00GiB handles=524288
ERROR[10-03|09:40:34.483] Failed to enumerate USB devices          hub=trezor vendor=4617  failcount=3 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[10-03|09:40:34.483] Failed to enumerate USB devices          hub=trezor vendor=21324 failcount=3 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[10-03|09:40:34.483] Failed to enumerate USB devices          hub=ledger vendor=11415 failcount=3 err="failed to initialize libusb: libusb: unknown error [code -99]"
INFO [10-03|09:40:34.769] Opened ancient database                  database=/root/.ethereum/geth/chaindata/ancient
INFO [10-03|09:40:34.825] Initialised chain configuration          config="{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Byzantium: 4370000 Constantinople: 7280000 Petersburg: 7280000 Istanbul: 9069000, Muir Glacier: 9200000, YOLO v1: <nil>, Engine: ethash}"
INFO [10-03|09:40:34.825] Disk storage enabled for ethash caches   dir=/root/.ethereum/geth/ethash count=3
INFO [10-03|09:40:34.825] Disk storage enabled for ethash DAGs     dir=/root/.ethash               count=2
INFO [10-03|09:40:34.826] Initialising Ethereum protocol           versions="[65 64 63]" network=1 dbversion=8
INFO [10-03|09:40:37.518] Loaded most recent local header          number=10974617 hash="d28c04…5fe44a" td=17763879313328271327648 age=1d4h43m
INFO [10-03|09:40:37.519] Loaded most recent local full block      number=10973423 hash="92578b…ae09c1" td=17759925126330650308055 age=1d9h14m
INFO [10-03|09:40:37.519] Loaded most recent local fast block      number=10974617 hash="d28c04…5fe44a" td=17763879313328271327648 age=1d4h43m
INFO [10-03|09:40:37.521] Loaded local transaction journal         transactions=0 dropped=0
INFO [10-03|09:40:37.521] Regenerated local transaction journal    transactions=0 accounts=0
INFO [10-03|09:40:37.522] Starting peer-to-peer node               instance=Geth/v1.9.23-unstable-9d1e2027-20200930/linux-amd64/go1.15.2
INFO [10-03|09:40:37.576] New local node record                    seq=52227 id=78ab8e1d111e4ab5 ip=127.0.0.1 udp=30303 tcp=30303
INFO [10-03|09:40:37.577] Started P2P networking                   self=enode://0b9ee2182b4382638cd77fc8b4369d00b4c14cc6c46d4c71d84a9a9fc191cab75c6566b78a42ddcf4a4d00ba9057747588750f518133bf821cd09e69d769ba0b@127.0.0.1:30303
INFO [10-03|09:40:37.580] IPC endpoint opened                      url=/root/.ethereum/geth.ipc
INFO [10-03|09:40:37.581] IPC endpoint closed                      url=/root/.ethereum/geth.ipc
Fatal: Error starting protocol stack: listen tcp: lookup "192.168.1.10": no such host
Fatal: Error starting protocol stack: listen tcp: lookup "192.168.1.10": no such host

When I turned off the - "--http" - "--http.addr=\"192.168.1.10\"" - "--http.port=8545" settings, the pod works without any problems. The pod begins syncing. nping to 192.168.1.10:30303 works without any problems. So I think the format of NodePort setting is correct. I wonder why the pod can't be started only when I add the series of --http settings.

I have already changed the range of port of k8s. So I think the port 30303 and 8545 are not wrong.

I'd like to know where to fix it or the cause of the error.

10/05
The result of kubectl get pod -A

NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
default       gethnodedeployment-6f5cd5cf4b-wnqst        1/1     Running   1          20s
default       intelnuc-mysql-deployment-9685c849-q6c9j   1/1     Running   0          6d20h
kube-system   coredns-66bff467f8-gbf9r                   1/1     Running   0          30d
kube-system   coredns-66bff467f8-xg72w                   1/1     Running   0          30d
kube-system   etcd-k8smaster                             1/1     Running   0          30d
kube-system   kube-apiserver-k8smaster                   1/1     Running   1          40h
kube-system   kube-controller-manager-k8smaster          1/1     Running   3          30d
kube-system   kube-flannel-ds-amd64-gcg5c                1/1     Running   0          30d
kube-system   kube-flannel-ds-amd64-mn7zq                1/1     Running   0          17d
kube-system   kube-flannel-ds-amd64-p6lkz                1/1     Running   0          30d
kube-system   kube-proxy-ckfkm                           1/1     Running   0          30d
kube-system   kube-proxy-qhnbn                           1/1     Running   0          17d
kube-system   kube-proxy-rr6b8                           1/1     Running   0          30d
kube-system   kube-scheduler-k8smaster                   1/1     Running   3          30d

Solution

  • Your deployment is missing a label:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gethnodedeployment
    

    needs to become

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gethnodedeployment
      labels:
        name: gethnode
    
    

    The label is what the service selector uses to find matching pods.