mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Add a nginx https example
This commit is contained in:
		
							
								
								
									
										18
									
								
								examples/https-nginx/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								examples/https-nginx/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
# Copyright 2015 The Kubernetes Authors. All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
FROM nginx
 | 
			
		||||
MAINTAINER Prashanth B <beeps@google.com>
 | 
			
		||||
COPY default.conf /etc/nginx/conf.d/default.conf
 | 
			
		||||
CMD ["nginx", "-g", "daemon off;"]
 | 
			
		||||
							
								
								
									
										24
									
								
								examples/https-nginx/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								examples/https-nginx/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
all:
 | 
			
		||||
 | 
			
		||||
TAG = 1.0
 | 
			
		||||
PREFIX = bprashanth/nginxhttps
 | 
			
		||||
KEY = /tmp/nginx.key
 | 
			
		||||
CERT = /tmp/nginx.crt
 | 
			
		||||
SECRET = /tmp/secret.json
 | 
			
		||||
 | 
			
		||||
keys:
 | 
			
		||||
	# The CName used here is specific to the service specified in nginx-app.yaml.
 | 
			
		||||
	openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $(KEY) -out $(CERT) -subj "/CN=nginxsvc/O=nginxsvc"
 | 
			
		||||
 | 
			
		||||
secret:
 | 
			
		||||
	CGO_ENABLED=0 GOOS=linux go run -a -installsuffix cgo -ldflags '-w' make_secret.go -crt $(CERT) -key $(KEY) > $(SECRET)
 | 
			
		||||
 | 
			
		||||
container:
 | 
			
		||||
	docker build -t $(PREFIX):$(TAG) .
 | 
			
		||||
 | 
			
		||||
push: container
 | 
			
		||||
	docker push $(PREFIX):$(TAG)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm $(KEY)
 | 
			
		||||
	rm $(CERT)
 | 
			
		||||
							
								
								
									
										87
									
								
								examples/https-nginx/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								examples/https-nginx/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,87 @@
 | 
			
		||||
<!-- BEGIN MUNGE: UNVERSIONED_WARNING -->
 | 
			
		||||
 | 
			
		||||
<!-- BEGIN STRIP_FOR_RELEASE -->
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
<h1>PLEASE NOTE: This document applies to the HEAD of the source
 | 
			
		||||
tree only. If you are using a released version of Kubernetes, you almost
 | 
			
		||||
certainly want the docs that go with that version.</h1>
 | 
			
		||||
 | 
			
		||||
<strong>Documentation for specific releases can be found at
 | 
			
		||||
[releases.k8s.io](http://releases.k8s.io).</strong>
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
<!-- END STRIP_FOR_RELEASE -->
 | 
			
		||||
 | 
			
		||||
<!-- END MUNGE: UNVERSIONED_WARNING -->
 | 
			
		||||
# Nginx https service
 | 
			
		||||
 | 
			
		||||
This example creates a basic nginx https service useful in verifying proof of concept, keys, secrets, and end-to-end https service creation in kubernetes.
 | 
			
		||||
It uses an [nginx server block](http://wiki.nginx.org/ServerBlockExample) to serve the index page over both http and https.
 | 
			
		||||
 | 
			
		||||
### Generate certificates
 | 
			
		||||
First generate a self signed rsa key and certificate that the server can use for TLS.
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
$ make keys secret KEY=/tmp/nginx.key CERT=/tmp/nginx.crt SECRET=/tmp/secret.json
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Create a https nginx application running in a kubernetes cluster
 | 
			
		||||
 | 
			
		||||
You need a [running kubernetes cluster](../../docs/getting-started-guides/) for this to work.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ kubectl create -f /tmp/secret.json
 | 
			
		||||
secrets/nginxsecret
 | 
			
		||||
 | 
			
		||||
$ kubectl create -f nginx-app.yaml
 | 
			
		||||
services/nginxsvc
 | 
			
		||||
replicationcontrollers/my-nginx
 | 
			
		||||
 | 
			
		||||
$ kubectl get svc nginxsvc -o json
 | 
			
		||||
...
 | 
			
		||||
                    {
 | 
			
		||||
                        "name": "http",
 | 
			
		||||
                        "protocol": "TCP",
 | 
			
		||||
                        "port": 80,
 | 
			
		||||
                        "targetPort": 80,
 | 
			
		||||
                        "nodePort": 30849
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "name": "https",
 | 
			
		||||
                        "protocol": "TCP",
 | 
			
		||||
                        "port": 443,
 | 
			
		||||
                        "targetPort": 443,
 | 
			
		||||
                        "nodePort": 30744
 | 
			
		||||
                    }
 | 
			
		||||
...
 | 
			
		||||
 | 
			
		||||
$ kubectl get nodes -o json | grep ExternalIP -A 2
 | 
			
		||||
...
 | 
			
		||||
                        "type": "ExternalIP",
 | 
			
		||||
                        "address": "104.197.63.17"
 | 
			
		||||
                    }
 | 
			
		||||
--
 | 
			
		||||
                        "type": "ExternalIP",
 | 
			
		||||
                        "address": "104.154.89.170"
 | 
			
		||||
                    }
 | 
			
		||||
...
 | 
			
		||||
 | 
			
		||||
$ curl https://nodeip:30744 -k
 | 
			
		||||
...
 | 
			
		||||
<title>Welcome to nginx!</title>
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
For more information on how to run this in a kubernetes cluster, please see the [user-guide](../../docs/user-guide/connecting-applications.md).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
 | 
			
		||||
[]()
 | 
			
		||||
<!-- END MUNGE: GENERATED_ANALYTICS -->
 | 
			
		||||
							
								
								
									
										17
									
								
								examples/https-nginx/default.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								examples/https-nginx/default.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
server {
 | 
			
		||||
        listen 80 default_server;
 | 
			
		||||
        listen [::]:80 default_server ipv6only=on;
 | 
			
		||||
 | 
			
		||||
        listen 443 ssl;
 | 
			
		||||
 | 
			
		||||
        root /usr/share/nginx/html;
 | 
			
		||||
        index index.html index.htm;
 | 
			
		||||
 | 
			
		||||
        server_name localhost;
 | 
			
		||||
        ssl_certificate /etc/nginx/ssl/nginx.crt;
 | 
			
		||||
        ssl_certificate_key /etc/nginx/ssl/nginx.key;
 | 
			
		||||
 | 
			
		||||
        location / {
 | 
			
		||||
                try_files $uri $uri/ =404;
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								examples/https-nginx/make_secret.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								examples/https-nginx/make_secret.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2015 The Kubernetes Authors All rights reserved.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
// A small script that converts the given open ssl public/private keys to
 | 
			
		||||
// a secret that it writes to stdout as json. Most common use case is to
 | 
			
		||||
// create a secret from self signed certificates used to authenticate with
 | 
			
		||||
// a devserver. Usage: go run make_secret.go -crt ca.crt -key priv.key > secret.json
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"flag"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/kubernetes/pkg/api/latest"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"log"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// TODO:
 | 
			
		||||
// Add a -o flag that writes to the specified destination file.
 | 
			
		||||
// Teach the script to create crt and key if -crt and -key aren't specified.
 | 
			
		||||
var (
 | 
			
		||||
	crt = flag.String("crt", "", "path to nginx certificates.")
 | 
			
		||||
	key = flag.String("key", "", "path to nginx private key.")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func read(file string) []byte {
 | 
			
		||||
	b, err := ioutil.ReadFile(file)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatalf("Cannot read file %v, %v", file, err)
 | 
			
		||||
	}
 | 
			
		||||
	return b
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
	if *crt == "" || *key == "" {
 | 
			
		||||
		log.Fatalf("Need to specify -crt -key and -template")
 | 
			
		||||
	}
 | 
			
		||||
	nginxCrt := read(*crt)
 | 
			
		||||
	nginxKey := read(*key)
 | 
			
		||||
	secret := &api.Secret{
 | 
			
		||||
		ObjectMeta: api.ObjectMeta{
 | 
			
		||||
			Name: "nginxsecret",
 | 
			
		||||
		},
 | 
			
		||||
		Data: map[string][]byte{
 | 
			
		||||
			"nginx.crt": nginxCrt,
 | 
			
		||||
			"nginx.key": nginxKey,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fmt.Printf(runtime.EncodeOrDie(latest.Codec, secret))
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								examples/https-nginx/nginx-app.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								examples/https-nginx/nginx-app.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: nginxsvc
 | 
			
		||||
  labels:
 | 
			
		||||
    app: nginx
 | 
			
		||||
spec:
 | 
			
		||||
  type: NodePort
 | 
			
		||||
  ports:
 | 
			
		||||
  - port: 80
 | 
			
		||||
    protocol: TCP
 | 
			
		||||
    name: http
 | 
			
		||||
  - port: 443
 | 
			
		||||
    protocol: TCP
 | 
			
		||||
    name: https
 | 
			
		||||
  selector:
 | 
			
		||||
    app: nginx
 | 
			
		||||
---
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: ReplicationController
 | 
			
		||||
metadata:
 | 
			
		||||
  name: my-nginx
 | 
			
		||||
spec:
 | 
			
		||||
  replicas: 1
 | 
			
		||||
  template:
 | 
			
		||||
    metadata:
 | 
			
		||||
      labels:
 | 
			
		||||
        app: nginx
 | 
			
		||||
    spec:
 | 
			
		||||
      volumes:
 | 
			
		||||
      - name: secret-volume
 | 
			
		||||
        secret:
 | 
			
		||||
          secretName: nginxsecret
 | 
			
		||||
      containers:
 | 
			
		||||
      - name: nginxhttps
 | 
			
		||||
        image: bprashanth/nginxhttps:1.0
 | 
			
		||||
        ports:
 | 
			
		||||
        - containerPort: 443
 | 
			
		||||
        - containerPort: 80
 | 
			
		||||
        volumeMounts:
 | 
			
		||||
        - mountPath: /etc/nginx/ssl
 | 
			
		||||
          name: secret-volume
 | 
			
		||||
		Reference in New Issue
	
	Block a user