I deployed a consul cluster with 3 pod in k8s and create a nodeport service to forward port 8500 t0 30850.
I register a service to pod 1.When I request endpoint http://ip:30850/v1/agent/deregister/serviceid, it may requests to a pod2 or pod3 that does not have the target serviceid. So I want to know, how can I deregister a service via a nodeport instead of pod ip.
Here is my k8s yaml.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: register-center
namespace: consul
spec:
serviceName: register-center
replicas: 3
selector:
matchLabels:
app: register-center
template:
metadata:
labels:
app: register-center
annotations:
network/subnet: iaas.default
spec:
terminationGracePeriodSeconds: 10
containers:
- name: register-center
image: consul:1.15
args:
- "agent"
- "-server"
- "-bootstrap-expect=3"
- "-ui"
- "-data-dir=/consul/data"
- "-bind=0.0.0.0"
- "-client=0.0.0.0"
- "-advertise=$(PODIP)"
- "-retry-join=register-center-0.register-center.$(NAMESPACE).svc.cluster.local"
- "-retry-join=register-center-1.register-center.$(NAMESPACE).svc.cluster.local"
- "-retry-join=register-center-2.register-center.$(NAMESPACE).svc.cluster.local"
- "-domain=cluster.local"
- "-disable-host-node-id"
- "-enable-script-checks=true"
env:
- name: PODIP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
ports:
- containerPort: 8500
name: ui-port
- containerPort: 8443
name: https-port
---
apiVersion: v1
kind: Service
metadata:
name: register-center-nodeport
namespace: consul
labels:
name: register-center
spec:
type: NodePort
ports:
- name: http
port: 8500
targetPort: 8500
nodePort: 30850
- name: https
port: 8443
targetPort: 8443
selector:
app: register-center