Reputation: 7555
I have a k0s Kubernetes cluster on a single node. I am trying to run a selenium/standalone-chrome
to create a remote Selenium node. The trouble that I am having is that it responds if I port forward 4444
from the pod, but cannot seem to access it via a Service port. I get connection refused. I don't know if it's because it's ignore connections that non-localhost.
The Pod
definition for pod/standalone-chrome
is:
apiVersion: v1
kind: Pod
metadata:
name: standalone-chrome
spec:
containers:
- name: standalone-chrome
image: selenium/standalone-chrome
ports:
- containerPort: 4444
env:
- name: JAVA_OPTS
value: '-Dwebdriver.chrome.whitelistedIps=""'
The Service
definition I have for service/standalone-chrome-service
is:
apiVersion: v1
kind: Service
metadata:
name: standalone-chrome-service
labels:
app: standalone-chrome
spec:
ports:
- port: 4444
name: standalone-chrome
type: ClusterIP
selector:
app: standalone-chrome
This creates the following, along with a busybox
container I have just for testing connectivity.
NAME READY STATUS RESTARTS AGE
pod/busybox1 1/1 Running 70 2d22h
pod/standalone-chrome 1/1 Running 0 3m15s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 18d
service/standalone-chrome-service ClusterIP 10.111.12.1 <none> 4444/TCP 3m5s
The issue I am having now is that I'm not able to access the remote Selenium service via standalone-chrome-service
. I get connection refused. For example, here is trying to reach it via the busybox1
container:
$ wget http://standalone-chrome-service:4444
Connecting to standalone-chrome-service:4444 (10.111.12.1:4444)
wget: can't connect to remote host (10.111.12.1): Connection refused
I am able to port forward from pod/standalone-chrome
to my host machine using kubectl port-forward
though and it works OK, which I think confirms a service is successfully running but not accessible via the Service
:
$ kubectl port-forward pod/standalone-chrome 4444:4444 &
Forwarding from 127.0.0.1:4444 -> 4444
Forwarding from [::1]:4444 -> 4444
$ wget http://localhost:4444
--2021-11-22 13:37:20-- http://localhost:4444/
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:4444... connected.
...
I'd greatly appreciate any help in figuring out how to get the Selenium remote server accessible via the Service
.
EDIT: Here is the updated Service definition with name
...
apiVersion: v1
kind: Service
metadata:
name: standalone-chrome-service
labels:
app: standalone-chrome
spec:
ports:
- port: 4444
name: standalone-chrome
type: ClusterIP
selector:
name: standalone-chrome
Here is the output of describe:
Name: standalone-chrome-service
Namespace: default
Labels: app=standalone-chrome
Annotations: <none>
Selector: name=standalone-chrome
Type: ClusterIP
IP Families: <none>
IP: 10.100.179.116
IPs: 10.100.179.116
Port: standalone-chrome 4444/TCP
TargetPort: 4444/TCP
Endpoints: <none>
Session Affinity: None
Events: <none>
Upvotes: 1
Views: 1270
Reputation: 4181
Service's syntax with:
selector:
app: standalone-chrome
is correct, selector
should be matched by label
.
Services match a set of Pods using labels and selectors, a grouping primitive that allows logical operation on objects in Kubernetes. Labels are key/value pairs attached to objects
See for more details Using a Service to Expose Your App.
Now you need to add this label
(which is app: standalone-chrome
) to your pod.yaml
metadata:
apiVersion: v1
kind: Pod
metadata:
name: standalone-chrome
labels:
app: standalone-chrome # this label should match to selector in service
spec:
containers:
- name: standalone-chrome
image: selenium/standalone-chrome
ports:
- containerPort: 4444
env:
- name: JAVA_OPTS
value: '-Dwebdriver.chrome.whitelistedIps=""'
Upvotes: 1