this my first deployment yaml file, i'm testing k8s with minikube like an external cluster, i would expose port 80 of minikube cluster to port 8080 of container (webservice). This my yaml:
apiVersion: v1
kind: List
metadata:
resourceVersion: ""
selfLink: ""
items:
############ Services ###############
- apiVersion: v1
kind: Service
metadata:
name: kuard-80
labels:
component: webserver
app: k8s-test
spec:
ports:
- port: 80
targetPort: 8080
protocol: TCP
loadBalancerIP: 192.168.99.100 # Minikube IP from "minikube ip"
selector:
component: webserver
sessionAffinity: None
type: LoadBalancer
############ Deployments ############
- apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: kuard
labels:
component: webserver
app: k8s-test
spec:
replicas: 1 # tells deployment to run 1 pod matching the template
selector:
matchLabels:
component: webserver
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
component: webserver
spec:
volumes:
- name: "kuard-data"
hostPath:
path: "/var/lib/kuard"
containers:
- image: gcr.io/kuar-demo/kuard-amd64:1
name: kuard
volumeMounts:
- mountPath: "/data"
name: "kuard-data"
livenessProbe:
httpGet:
path: /healthy
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 1
periodSeconds: 10
failureThreshold: 3
ports:
- containerPort: 8080
protocol: TCP
restartPolicy: AlwaysI expect the port 80 to answer me on http://192.168.99.100 , where the error? here are the results of some commands, services and endpoints
$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kuard-80 LoadBalancer 10.107.163.175 <pending> 80:30058/TCP 3m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 34d$ kubectl get endpoints
NAME ENDPOINTS AGE
kuard-80 172.17.0.7:8080 10m
kubernetes 192.168.99.100:8443 34dThanks for any help you can give me and excuse me if the question is stupid...
Your service is of type LoadBalancer which is supported only for cloud, hence your external ip is in pending state.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kuard-80 LoadBalancer 10.107.163.175 <pending> 80:30058/TCP 3m
You can expose your service using NodePort in minikube. Following will be the yaml file for that:
apiVersion: v1
kind: Service
metadata:
name: kuard-80
labels:
component: webserver
app: k8s-test
spec:
ports:
- port: 80
targetPort: 8080
protocol: TCP
selector:
component: webserver
type: NodePortNow, when you do kubectl describe service kuard-80 you will be able to see a port of type NodePort whose value will be in between 30000-32767. You will be able to access your application using:
http://<vm_ip>:<node_port>Hope this helps