Playing with Kubernetes deployments and NodePort services
life is SO much easier if I choose to define the service using YAML ( YAML Ain't Markup Language ).
So this is with what I ended up: -
cat ~/Desktop/nginx.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nginx
namespace: default
labels:
app: nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
selector:
app: nginx
remember that YAML is very positional and, apparently, tabs are abhorrent :-)
Having created - and validated using various listing plugins for Atom - the YAML, I was then able to apply it: -
kubectl apply -f ~/Desktop/nginx.yaml
service "my-nginx" created
and then validate: -
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 172.21.0.1 443/TCP 14d
my-nginx NodePort 172.21.24.197 80:31665/TCP 7s
and then test: -
curl http://192.168.132.131:31665
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
Commercial support is available at
Thank you for using nginx.
For reference, one can get YAML or JSON out of most, but not all of the K8S, commands: -
kubectl get services -o yaml
apiVersion: v1
items:
- apiVersion: v1
kind: Service
metadata:
creationTimestamp: 2019-01-29T16:18:07Z
labels:
component: apiserver
provider: kubernetes
name: kubernetes
namespace: default
resourceVersion: "33"
selfLink: /api/v1/namespaces/default/services/kubernetes
uid: 76a02dea-23e1-11e9-b35e-2a02ed9d765d
spec:
clusterIP: 172.21.0.1
ports:
- name: https
port: 443
protocol: TCP
targetPort: 2040
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
- apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"nginx"},"name":"my-nginx","namespace":"default"},"spec":{"ports":[{"name":"http","port":80,"protocol":"TCP","targetPort":80}],"selector":{"app":"nginx"},"type":"NodePort"}}
creationTimestamp: 2019-02-13T11:40:09Z
labels:
app: nginx
name: my-nginx
namespace: default
resourceVersion: "2072491"
selfLink: /api/v1/namespaces/default/services/my-nginx
uid: 1da46471-2f84-11e9-9f99-1201bf98c5fb
spec:
clusterIP: 172.21.24.197
externalTrafficPolicy: Cluster
ports:
- name: http
nodePort: 31665
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
kind: List
metadata:
resourceVersion: ""
selfLink: ""
kubectl get services -o json
{
"apiVersion": "v1",
"items": [
{
"apiVersion": "v1",
"kind": "Service",
"metadata": {
"creationTimestamp": "2019-01-29T16:18:07Z",
"labels": {
"component": "apiserver",
"provider": "kubernetes"
},
"name": "kubernetes",
"namespace": "default",
"resourceVersion": "33",
"selfLink": "/api/v1/namespaces/default/services/kubernetes",
"uid": "76a02dea-23e1-11e9-b35e-2a02ed9d765d"
},
"spec": {
"clusterIP": "172.21.0.1",
"ports": [
{
"name": "https",
"port": 443,
"protocol": "TCP",
"targetPort": 2040
}
],
"sessionAffinity": "None",
"type": "ClusterIP"
},
"status": {
"loadBalancer": {}
}
},
{
"apiVersion": "v1",
"kind": "Service",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"nginx\"},\"name\":\"my-nginx\",\"namespace\":\"default\"},\"spec\":{\"ports\":[{\"name\":\"http\",\"port\":80,\"protocol\":\"TCP\",\"targetPort\":80}],\"selector\":{\"app\":\"nginx\"},\"type\":\"NodePort\"}}\n"
},
"creationTimestamp": "2019-02-13T11:40:09Z",
"labels": {
"app": "nginx"
},
"name": "my-nginx",
"namespace": "default",
"resourceVersion": "2072491",
"selfLink": "/api/v1/namespaces/default/services/my-nginx",
"uid": "1da46471-2f84-11e9-9f99-1201bf98c5fb"
},
"spec": {
"clusterIP": "172.21.24.197",
"externalTrafficPolicy": "Cluster",
"ports": [
{
"name": "http",
"nodePort": 31665,
"port": 80,
"protocol": "TCP",
"targetPort": 80
}
],
"selector": {
"app": "nginx"
},
"sessionAffinity": "None",
"type": "NodePort"
},
"status": {
"loadBalancer": {}
}
}
],
"kind": "List",
"metadata": {
"resourceVersion": "",
"selfLink": ""
}
}
which is nice.
No comments:
Post a Comment