域名设置为x201
gencert.sh 修改 DNS.1 = x201
$ cd examples/k8s
$ ./gencert.sh
生成
$ ls ssl/
ca-key.pem ca.pem ca.srl cert.pem csr.pem key.pem req.cnf
$ kubectl create secret tls dex.example.com.tls --cert=ssl/cert.pem --key=ssl/key.pem
去GitHub上创建一个应用(GitHub-Setting-Developer Setting-New OAuth App) HomePage写 http://x201:5555 callback URL写 https://x201:32000/callback
32000是dex即将占用的端口号 5555是example app即将占用的端口号
用GitHub生成的Client ID和Client Secret替换下面的变量
$ kubectl create secret \
generic github-client \
--from-literal=client-id=$GITHUB_CLIENT_ID \
--from-literal=client-secret=$GITHUB_CLIENT_SECRET
kubectl create -f dex.yaml
dex文件不要用master分支的,用我的。 最主要的修改就是,dex的镜像版本,master分支上的版本太老了。 另外我把需要创建的CRD也加在这个文件里了。
然后就是example-app了 它需要下载源码,编译,稍微有点麻烦。build成功了启动一下:
./cmd/example-app/main --issuer https://x201:32000 --issuer-root-ca examples/k8s/ssl/ca.pem --listen http://192.168.1.19:5555 --redirect-uri http://x201:5555/callback
然后在浏览器里访问 http://192.168.1.19:5555,这时会显示example-app的首页,点击login,会显示Dex的几个认证选择(Login with email/Login with Example/Login with Github),我们选择GitHub,然后会跳转到GitHub的登录(若未登录)、询问是否要授权给Dex(只有第一次会问),如果你愿意授权的话,会再跳回到Dex,此时会再问一次手否要授权给example-app,最后会回到example-app的登录页面,显示当前用户的token和一些信息。
这个token很重要哦,后面还会频繁的用到。
再理一下流程:Dex是example-app(以及下面的kube-apiserver)的第三方认证,而GitHub是Dex的第三方认证。