GVKun编程网logo

[故障排除]CentOS Docker网桥模式无法访问宿主机Redis服务

23

如果您想了解[故障排除]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服务

[故障排除]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故障排除

active-directory – SSSD Kerberos AD Centos故障排除

我按照RedHat AD集成中的配置3( https://access.redhat.com/sites/default/files/attachments/rhel-ad-integration-deployment-guidelines-v1.5.pdf);但我被卡住了.

我在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使用特定的域控制器?

尝试安装并运行msktutil(可通过EPEL获得).

安装:

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

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(单点)

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 主从

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 主从等相关内容,可以在本站寻找。

本文标签: