如果您想了解[故障排除]CentOSDocker网桥模式无法访问宿主机Redis服务的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于active-directory–SSSDKerbero
如果您想了解[故障排除]CentOS Docker网桥模式无法访问宿主机Redis服务的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于active-directory – SSSD Kerberos AD Centos故障排除、CentOS 中利用 Docker 安装 Redis、CentOS-Docker安装Redis(单点)、centos6 使用 docker 部署 redis 主从的有价值的信息。
本文目录一览:- [故障排除]CentOS Docker网桥模式无法访问宿主机Redis服务
- active-directory – SSSD Kerberos AD Centos故障排除
- CentOS 中利用 Docker 安装 Redis
- CentOS-Docker安装Redis(单点)
- centos6 使用 docker 部署 redis 主从
[故障排除]CentOS Docker网桥模式无法访问宿主机Redis服务
背景:
之前做了一个项目,需要在容器内访问宿主机提供的Redis 服务(这是一个比较常见的应用场景哈), 常规方案:
① 主机网络(docker run --network=host): 完全应用主机网络堆栈,在容器内localhost就是指向宿主机
② 网桥网络(docker run --network=bridge): 这也是docker容器默认的网络通信模式,容器内localhost 指向的是容器自身,不能使用 localhost 访问宿主机上localhost:6379承载的Redis服务 。
docker会默认建立docker0 网桥;
网桥有一个网关ip, 有一个子网段; 网桥内容器从子网段中确定容器ip( ip addr eth0), 网桥内容器可通过 service name相互访问;
网桥内容器通过 docker0 Getway得以访问外网。
头脑风暴
不做骚操作,沿用常见的②网桥模式, 网桥网络模型如下所示:
Docker 引擎在网桥上有个网关IP,容器在连接的网桥上有个容器IP。
操作
第一步:自定义网桥并应用该自定义网桥
docker network create --gateway 172.16.1.1 --subnet 172.16.1.0/24 app_bridge
docker run --network=app_bridge --name ......
# 以下截取自docker-compose.yml文件
......
networks:
default:
name: app_bridge
external: true
为啥不利用默认docker0网桥?
本文开头已讲: docker0 是默认网桥,新建的容器默认都会加入这个网桥,所以我们需要建立一个专属于本程序的网桥app_bridge
第二步:容器内建立 对应于宿主机的别名
为实现在容器内网桥模式访问宿主机localhost:6379 的服务, 必须搭配docker 提供的 --add-host 选项(对应到docker-compose.yml这个配置是extra_host
)。
docker run 的--add-host 选项能在 容器 /etc/hosts 文件增加行记录,便于我们使用该名称访问其他网络。
docker run -it --add-host dockerhost:172.16.1.1 ubuntu cat /etc/hosts 172.17.0.22 09d03f76bf2c fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback 172.16.1.1 dockerhost
之后在程序的配置文件即可应用 dockerhost:6379 访问宿主机Redis服务。
------------------------------------------ 稍熟悉docker网络模型的朋友应该 都能理解并完成上述操作-----------------------------------------------------
状况
我在公司CentOS7机器上使用上述操作, 容器内一直无法连通宿主机(容器间还是能正常访问)。
简化问题测试:新建容器,在容器内尝试ping docker0 网关, 哔了狗了,4台公司机器都ping不通docker0网关,外网还是正常访问。
那这个问题就成了: 使用默认的docker0网桥,容器内无法ping通docker0网关,进而无法访问宿主机。
呀呀呀呀, 八成是公司机器的配置问题 ~。。~
追问公司运维同学,发现:
Chain INPUT (policy DROP)
以上INPUT链的缺省策略是丢弃:从容器内访问宿主机的INPUT链规则不匹配其中列出的任意一条,将被丢弃(缺省),所以我们从容器ping docker0网关会收不到结果。
这个策略的初衷是 服务器安全(尼玛, 导致容器访问宿主机的基础能力都没有了!!!)。
运维方案:
① 使用 sudo service iptables stop 关闭iptables
② 将容器使用的源IP(网桥网段)加入INPUT链
sudo iptables -I INPUT -s 172.17.0.0/16 -j ACCEPT
【接受docker0子网段172.17.0.0/16 INPUT】 加入规则, 传送门
OK, That‘s All, 以后若有朋友在公司网络遇到 默认网桥容器内无法ping通网桥网关,进而无法访问宿主机,可参考本文排障。
原文出处:https://www.cnblogs.com/JulianHuang/p/11636825.html
active-directory – SSSD Kerberos AD Centos故障排除
我在Centos 6.8上.
我有一个有效的AD连接:
service sssd stop rm -r /var/lib/sss/db/* rm -r /var/lib/sss/mc/* service sssd start getent passwd robau@MYNETWORK.LOCAL
这返回了一条明智的路线:
robau:*:102201201:102200513:Rob Audenaerde:/:
但是,当我尝试通过SSH连接时,我无法登录.我在sssd.conf中的所有组件级别5上启用了SSSD调试.
我看到的错误(在var / log / sssd / krb5_child.log中)是:
(Fri Jun 17 17:23:18 2016) [[sssd[krb5_child[3561]]]] [validate_tgt] (0x0020): TGT Failed verification using key for [host/server-new.mynetwork.nl@MYNETWORK.LOCAL]. (Fri Jun 17 17:23:18 2016) [[sssd[krb5_child[3561]]]] [get_and_save_tgt] (0x0020): 1240: [-1765328377][Server not found in Kerberos database] (Fri Jun 17 17:23:18 2016) [[sssd[krb5_child[3561]]]] [map_krb5_error] (0x0020): 1301: [-1765328377][Server not found in Kerberos database] (Fri Jun 17 17:23:18 2016) [[sssd[krb5_child[3561]]]] [k5c_send_data] (0x0200): Received error code 1432158209
服务器在DNS中,我可以使用nslookup找到它
nslookup server-new.mynetwork.nl Server: 192.168.110.56 Address: 192.168.110.56#53 Name: server-new.mynetwork.nl Address: 192.168.210.94
和
kvno host/server-new.mynetwork.nl@MYNETWORK.LOCAL kvno: Server not found in Kerberos database while getting credentials for host/server-new.mynetwork.nl@MYNETWORK.LOCAL
有关故障排除的任何提示/提示?
[编辑]
我用authconfig来设置必要的pam和nss东西:
authconfig --enablesssdauth --enablesssd --enablemkhomedir --update
输出klist -kte:
25 06/20/16 10:56:24 host/server-new.mynetwork.nl@MYNETWORK.LOCAL (des-cbc-crc) 25 06/20/16 10:56:24 host/server-new.mynetwork.nl@MYNETWORK.LOCAL (des-cbc-md5) 25 06/20/16 10:56:24 host/server-new.mynetwork.nl@MYNETWORK.LOCAL (aes128-cts-hmac-sha1-96) 25 06/20/16 10:56:24 host/server-new.mynetwork.nl@MYNETWORK.LOCAL (aes256-cts-hmac-sha1-96) 25 06/20/16 10:56:24 host/server-new.mynetwork.nl@MYNETWORK.LOCAL (arcfour-hmac) 25 06/20/16 10:56:24 host/server-new@MYNETWORK.LOCAL (des-cbc-crc) 25 06/20/16 10:56:24 host/server-new@MYNETWORK.LOCAL (des-cbc-md5) 25 06/20/16 10:56:25 host/server-new@MYNETWORK.LOCAL (aes128-cts-hmac-sha1-96) 25 06/20/16 10:56:25 host/server-new@MYNETWORK.LOCAL (aes256-cts-hmac-sha1-96) 25 06/20/16 10:56:25 host/server-new@MYNETWORK.LOCAL (arcfour-hmac) 25 06/20/16 10:56:25 SERVER-NEW$@MYNETWORK.LOCAL (des-cbc-crc) 25 06/20/16 10:56:25 SERVER-NEW$@MYNETWORK.LOCAL (des-cbc-md5) 25 06/20/16 10:56:25 SERVER-NEW$@MYNETWORK.LOCAL (aes128-cts-hmac-sha1-96) 25 06/20/16 10:56:25 SERVER-NEW$@MYNETWORK.LOCAL (aes256-cts-hmac-sha1-96) 25 06/20/16 10:56:26 SERVER-NEW$@MYNETWORK.LOCAL (arcfour-hmac)
输出klist
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: SERVER-NEW$@MYNETWORK.LOCAL Valid starting Expires Service principal 06/20/16 10:56:41 06/20/16 20:56:41 krbtgt/MYNETWORK.LOCAL@MYNETWORK.LOCAL renew until 06/27/16 10:56:41 06/20/16 11:36:07 06/20/16 20:56:41 ldap/my-ad.mynetwork.local@MYNETWORK.LOCAL renew until 06/27/16 10:56:41
[编辑2]
如果我在sssd.conf部分[domain / mynetwork.local]的末尾添加krb5_validate,那么我就可以登录了.但是,我还设置了另一台不需要这个步骤的服务器,所以我不愿意这样做.
[编辑3]
在网络广告加入-k期间,我收到错误/警告:
DNS Update for Failed: ERROR_DNS_GSS_ERROR DNS update Failed!
[编辑4]
我看到网络广告信息的输出没有使用我在配置文件中指定的主域控制器(并且是2003R2而不是2008R2).有没有办法“强制”网络广告加入-k使用特定的域控制器?
安装:
yum -y --enablerepo=epel install msktutil
要运行它:
msktutil --auto-update --server my-ad --verbose
然后运行一个kinit:
kinit -k server-new$
此外,您应该每隔6个小时左右执行这两项工作.这样你的门票就不会过期.
回答EDIT4:你应该能够指定一个带有网络广告的服务器加入-k -S,但默认情况下它会在你的DNS中搜索SRV记录.哪个好.除非你不想那样.如果您希望特定站点使用不同的DC,请查看Active Directory站点&服务.
CentOS 中利用 Docker 安装 Redis
CentOS 中利用 Docker 安装 Redis
1、拉取镜像
#docker pull redis:4.0.10
2、加载镜像
#docker run -p 6379:6379 --name test-redis -v /root/redis/data:/data/redis-db -d --restart=always redis:4.0.10 redis-server --appendonly yes --requirepass "test@2018"
3、进入容器执行 redis 客户端
#docker exec -it 43ead8f3a3b7 redis-cli
#auth ''test@2018''
或
#docker exec -it 43ead8f3a3b7 redis-cli -h 127.0.0.1 -p 6379 -a ''test@2018''
4、测试:
#ping
#info
CentOS-Docker安装Redis(单点)
下载镜像
$ docker pull redis
创建目录
$ mkdir -p /usr/redis/data
运行镜像
$ docker run --restart=unless-stopped -d --name redis -p 6379:6379 -v /usr/redis/data:/data redis redis-server --appendonly yes --requirepass "123456"
或(指定配置文件)
$ docker run --restart=unless-stopped -d --name redis -p 6379:6379 \
-v /usr/redis/redis.conf:/etc/redis/redis.conf -v /usr/redis/data:/data redis \
redis-server /etc/redis/redis.conf --appendonly yes --requirepass "123456"
命令说明
-p 6379:6379 : 将容器的6379端口映射到主机的6379端口
-d : 将容器的在后台运行
-v /usr/redis/data:/data : 将主机中当前目录下的data挂载到容器的/data .redis数据卷,如未加上这个,容器重启后数据将丢失.
redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
--requirepass "123456" 设置引号里字符为密码
-restart=always : 随docker启动而启动
打开redis客户端
$ docker exec -it redis redis-cli
使用说明
springboot集成
spring:
redis:
host: 127.0.0.1
port: 6379
timeout: PT60S
database: 0
password:
centos6 使用 docker 部署 redis 主从
目录结构:
/redis
/Dockerfile
/Readme
/redis-3.2.8.tar.gz
/start.sh
Dockerfile:
FROM centos
MAINTAINER qiongtao.li hnatao@126.com
ADD ./redis-3.2.8.tar.gz /opt
ADD ./start.sh /opt/start_redis.sh
RUN echo "Asia/shanghai" > /etc/timezone \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& yum -y install gcc make \
&& ln -s /opt/redis-3.2.8 /opt/redis \
&& cd /opt/redis && make && make install
EXPOSE 6379
ENTRYPOINT ["sh", "/opt/start_redis.sh"]
start.sh
role=$1
port=6379
password=Abc123
redis_conf=/opt/redis/redis.conf
dir=/data/redis
logfile=/data/redis/redis.log
mkdir -p $dir
sed -i "s|bind 127.0.0.1|bind 0.0.0.0|g" $redis_conf
sed -i "s|# requirepass foobared|requirepass ${password}|g" $redis_conf
sed -i "s|dir ./|dir ${dir}|g" $redis_conf
sed -i "s|logfile \"\"|logfile ${logfile}|g" $redis_conf
if [ "$role" == "slave" ]; then
echo "slave"
sed -i "s|# slaveof <masterip> <masterport>|slaveof redis-master ${port}|g" $redis_conf
sed -i "s|# masterauth <master-password>|masterauth ${password}|g" $redis_conf
else
echo "master"
fi
redis-server $redis_conf
Readme
docker rm -f redis-master redis-slave-1 redis-slave-2
docker rmi -f redis
docker build -t redis .
docker run -d --name redis-master redis
docker run -d --name redis-slave-1 --link redis-master:redis-master redis slave
docker run -d --name redis-slave-2 --link redis-master:redis-master redis slave
docker ps -a
docker exec redis-master redis-cli -a Abc123 set name hnatao
docker exec redis-master redis-cli -a Abc123 get name
docker exec redis-slave-1 redis-cli -a Abc123 get name
docker exec redis-slave-2 redis-cli -a Abc123 get name
docker exec redis-master grep -E "bind|dir|require|logfile|slaveof|masterauth" /opt/redis/redis.conf
docker exec redis-slave-1 grep -E "bind|dir|require|logfile|slaveof|masterauth" /opt/redis/redis.conf
docker exec redis-slave-2 grep -E "bind|dir|require|logfile|slaveof|masterauth" /opt/redis/redis.conf
docker exec redis-master redis-cli -a Abc123 info
docker exec redis-slave-1 redis-cli -a Abc123 info
docker exec redis-slave-2 redis-cli -a Abc123 info
测试安装部署
cat Readme|while read line; do $line; done
关于[故障排除]CentOS Docker网桥模式无法访问宿主机Redis服务的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于active-directory – SSSD Kerberos AD Centos故障排除、CentOS 中利用 Docker 安装 Redis、CentOS-Docker安装Redis(单点)、centos6 使用 docker 部署 redis 主从等相关内容,可以在本站寻找。
本文标签: